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对象,如下:

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)

传入的参数有五种类型如下:对应着不同的权重。

Android手机多媒体——通知

 

 

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 }

 

Android手机多媒体——通知

上一篇:【leetcode 简单】 第七十六题 移动零


下一篇:Js捕获异常的方法