美文网首页
# Android11-通知的使用

# Android11-通知的使用

作者: figure_ai | 来源:发表于2017-04-13 12:01 被阅读0次

1.使用通知

1.1 创建一个通知

  • 第一步:获得NotificationManager对象来对通知进行管理。

    可以调用Context的getSystemService()方法获取。该方法接收一个字符串参数,用于确定获取哪个系统服务,获取通知传入Context.NOTIFICATION_SERVICE

    • 代码如下:
     //创建一个NotificationManager对象
     NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
  • 第二步:创建一个Notification对象

使用一个Builder构造器来创建一个Notification对象。

//创建Notification
 Notification notification = new NotificationCompat.Builder(MainActivity.this)
         .setContentTitle("这是通知内容标题")
         .setContentText("正式通知内容")
         .setWhen(System.currentTimeMillis())
         .setSmallIcon(R.mipmap.ic_launcher)
         .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
         .build();
  • 第三步:显示通知

    调用NotificationManager的notify()方法可以让通知显示出来,该方法接收两个参数,第一个是id,保证每个通知指定的id都是不同的,第二个是要显示的Notification对象

manager.notify(1, notification);
  • 完整代码如下
sendNotice = (Button) findViewById(R.id.send_notification);
       sendNotice.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               //获得NotificationManager对象
               NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
               //创建Notification
               Notification notification = new NotificationCompat.Builder(MainActivity.this)
                       .setContentTitle("这是通知内容标题")
                       .setContentText("正式通知内容")
                       .setWhen(System.currentTimeMillis())
                       .setSmallIcon(R.mipmap.ic_launcher)
                       .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                       .build();
               //发送通知
               manager.notify(1, notification);
           }
       });

1.2实现通知的点击功能

使用PendingIntent可以实现这一功能。PendingIntent和Intent类似,但是PendingIntent更加倾向于在某个合适的时机去执行某个某个动作,而Intent更加倾向于立即执行某个动作。

1.2.1PendingIntent的用法

  • PendingIntent提供了几个静态方法用于获取PendingIntent的实例:getActivity()getBroadcast()getService()
  • 这几个静态方法接受的参数都是相同的:
- 第一个是Context

- 第二个一般用不到,通常传0即可。

- 第三个是一个Intent对象

- 第四个是用于确定PendingIntent的行为 
  • 完整代码如下
//初始化Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
//使用Intent获得PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
   .setContentTitle("这是通知内容标题")
   .setContentText("正式通知内容")
   .setWhen(System.currentTimeMillis())
   .setSmallIcon(R.mipmap.ic_launcher)
   .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
   //设置PendingIntent
   .setContentIntent(pi)
   .build();
//显示通知
manager.notify(1,notification);
}

1.3实现点击通知之后删除通知的功能
实现这个功能有两种方法,

  • 第一种是在实例化notification时setAutoCancel传入true。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
.build();
  • 第二种是显示的调用NotificationManager的cancel()方法将它取消,这个方法接收通知的id用于指定取消哪个通知
//获得NotificationManager对象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消id为1的通知
manager.cancel(1);

2.通知的高级功能

2.1通知发出时播放音频
使用setSound()方法,接收一个Uri参数,指定通知发出时要播放的音频

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();

2.2通知发出时手机振动

使用setVibrate()方法,接收一个virbrate参数,它是一个长整型数组,用于设置手机静止和振动的时长。下标为0的值表示手机静止的时长,下标为1的值表示手机振动时长,下标为2的值表示手机静止的时长。

Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
.build();

注意:使用手机的震动功能还需在AndroidManifest.xml文件中添加权限声明

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.anwser_mac.notificationtest">
    //声明权限
    <uses-permission android:name="android.permission.VIBRATE"/>

2.3 实现通知未读时LED灯闪烁

Notification notification = new NotificationCompat.Builder(MainActivity.this)
    .setContentTitle("这是通知内容标题")
    .setContentText("正式通知内容")
    .setWhen(System.currentTimeMillis())
    .setSmallIcon(R.mipmap.ic_launcher)
    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
    //设置PendingIntent
    .setContentIntent(pi)
    //设置点击通知时删除通知
    .setAutoCancel(true)
    //播放音频
    .setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
    //设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
    .setVibrate(new long[] {0, 1000, 1000, 1000})
    //设置LED灯,绿色闪烁
    .setLights(Color.GREEN, 1000, 1000)
    .build();
  • 注:如果不想进行这么繁杂设置,可以直接使用通知的默认效果,它会根据手机环境来决定播放什么铃声,及如何振动等

    Notification notification = new NotificationCompat.Builder(this)
    .setDefaults(NotificationCompat.DEFAULT_ALL)
    .build();
    

2.4设置通知显示长文本内容,超出范围自动换行
在setStyle方法中创建一个NotificationCompat.BigTextStyle对象,然后调用该对象的bigText方法

    .setStyle(new NotificationCompat.BigTextStyle().bigText("hhhhhhhhhhhhhhhhhhhhhhhhhhhhzheshi 一段很长长的文本"))

2.5设置通知显示一张大图

具体用法跟2.4类似,但是这次创建的是一个NotificationCompat.BitPictureStyle对象。

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round)))

2.6设置通知的重要程度
调用setPriority()方法来设置通知的重要程度,分为5歌级别

  1. PRIORITY_DEFAULT : 表示默认程度,和不设置的效果一样。
  2. PRIORITY_MIN :最低的重要程度,系统可能只会在特定的场景才会显示这条通知,比如用户下拉状态栏的时候。
  3. PRIORITY_LOW : 较低的重要程度,系统可能会降这类通知缩小,或改变其显示的顺序
  4. PRIORITY_HIGHT : 较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在比较靠前的位置。
  5. PRIORITY_MAX : 最高的重要程度,这类通知消息必须要让用户立即看到,甚至需要用户做出相应操作。
  • 具体写法如下:
setPriority(NotificationCompat.PRIORITY_MAX)
2017-04-13_11-58-07.gif

相关文章

  • # Android11-通知的使用

    1.使用通知 1.1 创建一个通知 第一步:获得NotificationManager对象来对通知进行管理。可以调...

  • 通知的使用

    1.创建通知事件 [[NSNotificationCenterdefaultCenter]addObserver:...

  • 使用通知

    通知(Notification)是Android系统中比较有特色的的一个功能,当某个应用程序希望向用户发出一些提示...

  • 通知使用

    创建对象 NSNotification *notification =[NSNotification notifi...

  • 通知使用

  • iOS-Notification 实现原理详解

    目录 一 通知的基本使用基本概念什么情况下使用通知应用场景如何使用通知使用通知需要注意的细节二 通知实现的原理概述...

  • iOS 通知多线程的使用

    一、通知使用的回顾 1.1、通知使用一添加通知/** 添加通知 observer:观察者 aSelector...

  • 设计模式第三篇、观察者设计模式

    目录一、通知 1、什么是通知 2、怎么使用通知 3、通知的实现原理 4、使用通知需要注意的地方 5、通知的应用场景...

  • iOS 通知多线程的使用

    iOS 通知多线程的使用 iOS 通知多线程的使用

  • 我眼中的NSNotificationCenter

    正确的使用通知方法 通知中心与多线程 通知中心需要释放吗? 如何实现自动移除监听? 通知的实现原理 正确的使用通知...

网友评论

      本文标题:# Android11-通知的使用

      本文链接:https://www.haomeiwen.com/subject/uerbattx.html