Android手机多媒体——通知

卧疾丰暇豫,翰墨时间作。这篇文章主要讲述Android手机多媒体——通知相关的知识,希望能为你提供帮助。
【Android手机多媒体——通知】一 创建手机通知
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对象,如下:
1Notification 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)

传入的参数有五种类型如下:对应着不同的权重。
Android手机多媒体——通知

文章图片

 
 
7.实例
通过一个按键来发送通知,并且可以通过通知跳转到另外一个活动。另外,这个实例中按键触发器是用另外一种switch方式来写的。
1 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 2 3@Override 4protected void onCreate(Bundle savedInstanceState) { 5super.onCreate(savedInstanceState); 6setContentView(R.layout.activity_main); 7 8Button sendNotice = (Button) findViewById(R.id.send_notice); 9sendNotice.setOnClickListener(this); 10} 11 12 13@Override 14public void onClick(View view) { 15switch (view.getId()){ 16case R.id.send_notice: 17/*创建一个延时的intent pendingintent,getActivity传入四个参数, 18* 在之后的新建通知时也要setContentIntent这个延时的intent*/ 19Intent intent = new Intent(this,NotificationAcitivity.class); 20PendingIntent pi = PendingIntent.getActivity(this,0,intent,0); 21/*获取到一个NotificationManager来对通知进行管理, 22* 使用的是getSystemService方法,传入一个服务,返回一个manager*/ 23NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 24Notification 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(); 33manager.notify(1,notification); //每条通知对应一个id 34break; 35default: 36break; 37} 38} 39 }

 

    推荐阅读