一 创建手机通知
1.创建一个NotificationManager
创建一个NotificationManager来对通知就行管理。一般调用context的getSystemService()方法得到这个对象,这个方法传入要获取的服务,返回的是一个该类型的值。如下:
/*获取到一个NotificationManager来对通知进行管理, * 使用的是getSystemService方法,传入一个服务,返回一个manager*/ NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2.创建一个Notification对象
可以使用NotificationCompat类中的构造器来——Builder构造器来创建Notification对象,稳定性较好。
Notification notification = new NotificationCompat.Builder(context).build();
但是这只是一个空的通知,还需要在build()之前加上任意多的设置来创建一个Notification对象,如下:
1 Notification notification = new NotificationCompat.Builder(this) 2 .setContentTitle("this is content title") //设置通知标题 3 .setContentText("this is content text") //设置通知内容 4 .setWhen(System.currentTimeMillis()) //设置通知被创建的时间 5 .setSmallIcon(R.mipmap.ic_launcher) //设置通知的小图标 6 .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) //设置通知的大图标 7 .setContentIntent(pi) //设置通知的内容跳转 参数是一个pendingIntent 8 .setAutoCancel(true) //设置提醒点击后自动取消 9 .build();
以上就是一些要加入的基本的设置。
3.创建通知点击跳转——PendingIntent
Pendingintent相当于一个延迟执行的Intent,用法也很简单。
获取PendingIntent实例的静态方法有:getActivity(),getBroadcast(),getService()三种,他们所接受的参数都是相同的,
第一个参数是content,第二个一般设为0,第三个是一个intent对象,第四个用于确定pendingIntent的行为,有FLAG_ONESHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四种值可以选,通常传入0就可以了。
/*创建一个延时的intent pendingintent,getActivity传入四个参数, * 在之后的新建通知时也要setContentIntent这个延时的intent*/ Intent intent = new Intent(this,NotificationAcitivity.class); PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
这个pi也是上一步要调用pendingIntent的对象。
4.显示通知
然后调用NotificationManager中的notify()方法就可以让通知显示出来了。
manager.notify(1,notification); //参数分别是id 和 要发送的通知。每条通知对应一个id
5.更多通知设置
通知还可以设置声音,震动,LED灯光等效果,如下:
1 //设置一段通知发送时的音频 接收一个Uri参数 2 .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/luna.ogg"))) 3 //设置通知发送时的震动,是长整型的数组,对应手机静止时间,震动时间,来回交替,以毫秒为单位 4 .setVibrate(new long[]{0,1000,1000,1000}) 5 //设置LED灯,三个参数分别是 灯颜色,灯亮起时长,灯暗下时长 6 .setLights(Color.GREEN,1000,1000) 7 .build();
其中要获得震动功能需要声明权限
<uses-permission android:name="android.permission.VIBRATE"/>
如果不想自己设置,可以直接使用默认效果。
.setDefaults(NotificationCompat.DEFAULT_ALL)
6.通知的高级功能
使用setStyle()方法,可以在通知里传入长文本和图片等内容
传入长文本:通过setSyle方法,参数中,使用NotificationCompat类中的BigTextStyle方法,传入长文本
1 .setStyle(new NotificationCompat.BigTextStyle().bigText("aaaaaaaaaaaaaaaaaaaaa" + 2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")) 4 .build();
传入图片:通过setSyle方法,参数中,使用NotificationCompat类中的BigPictureStyle方法,传入图片。其中使用BitmapFactory类中的decodeResource方法 将图片转化为bitmap格式。
1 .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image))) 2 .build();
设置通知权限:
.setPriority(NotificationCompat.PRIORITY_MAX)
传入的参数有五种类型如下:对应着不同的权重。
7.实例
通过一个按键来发送通知,并且可以通过通知跳转到另外一个活动。另外,这个实例中按键触发器是用另外一种switch方式来写的。
1 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 Button sendNotice = (Button) findViewById(R.id.send_notice); 9 sendNotice.setOnClickListener(this); 10 } 11 12 13 @Override 14 public void onClick(View view) { 15 switch (view.getId()){ 16 case R.id.send_notice: 17 /*创建一个延时的intent pendingintent,getActivity传入四个参数, 18 * 在之后的新建通知时也要setContentIntent这个延时的intent*/ 19 Intent intent = new Intent(this,NotificationAcitivity.class); 20 PendingIntent pi = PendingIntent.getActivity(this,0,intent,0); 21 /*获取到一个NotificationManager来对通知进行管理, 22 * 使用的是getSystemService方法,传入一个服务,返回一个manager*/ 23 NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 24 Notification notification = new NotificationCompat.Builder(this) 25 .setContentTitle("this is content title") //设置通知标题 26 .setContentText("this is content text") //设置通知内容 27 .setWhen(System.currentTimeMillis()) //设置通知被创建的时间 28 .setSmallIcon(R.mipmap.ic_launcher) //设置通知的小图标 29 .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)) //设置通知的大图标 30 .setContentIntent(pi) //设置通知的内容跳转 参数是一个pendingIntent 31 .setAutoCancel(true) //设置提醒点击后自动取消 32 .build(); 33 manager.notify(1,notification); //每条通知对应一个id 34 break; 35 default: 36 break; 37 } 38 } 39 }