美文网首页
# 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-通知的使用

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