当前位置:   article > 正文

Android Notification 通知的使用以及自定义通知_android mnotification.setongoing

android mnotification.setongoing

如何发送一个通知?

Android 8版本之前:

第一步:获取NotificationManager

mNotificationManager = (NotificationManager)activity.getSystemService(NOTIFICATION_SERVICE);

第二步:构建一个Notification的builder用于构建Notification

  1. Notification.Builder builder=new Notification.Builder(activity);
  2. builder.setContentTitle("测试 "+mNotificationId) //必须提供
  3. .setContentText("测试内容") //必须提供
  4. .setTicker("测试通知到达")
  5. .setWhen(System.currentTimeMillis())
  6. .setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
  7. .setSmallIcon(R.mipmap.ic_launcher_round) //必须提供
  8. .setOngoing(true) // 设置常驻用户无法清除
  9. .setContentIntent(intent); //用于点击通知跳转界面

第三步:调用NotificationManager的notify函数,传入一个int类型id(用于标识通知)和一个Notification对象

mNotificationManager.notify(mNotificationId++, builder.build());

Android 8版本之后:

大体步骤没什么区别,多了个Channel通道

  1. mNotificationManager = (NotificationManager) activity.getSystemService(NOTIFICATION_SERVICE);
  2. NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"my_channel",NotificationManager.IMPORTANCE_DEFAULT);
  3. channel.enableLights(true); //是否在桌面icon右上角展示小红点
  4. channel.setLightColor(Color.GREEN); //小红点颜色
  5. channel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知
  6. mNotificationManager.createNotificationChannel(channel);//创建Channel

builder需要设置Channel

  1. builder.setContentTitle("测试 "+mNotificationId) //必须提供
  2. .setContentText("测试内容") //必须提供
  3. .setTicker("测试通知到达")
  4. .setWhen(System.currentTimeMillis())
  5. .setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
  6. .setSmallIcon(R.mipmap.ic_launcher_round) //必须提供
  7. .setOngoing(true) // 设置常驻用户无法清除
  8. .setContentIntent(intent) //用于点击通知跳转界面
  9. .setChannelId(CHANNEL_ID); //Android O以上版本必须提供

同样是调用notify开启一个通知

mNotificationManager.notify(mNotificationId++, builder.build());

添加点击通知跳转Activity:

创建一个Intent

  1. mIntent=new Intent();
  2. mIntent.setClass(activity,SecondActivity.class);

创建一个PendingIntent:

PendingIntent intent=PendingIntent.getActivity(activity,0,mIntent,0);

在builder中setContentIntent

  1. builder.setContentTitle("测试 "+mNotificationId) //必须提供
  2. .setContentText("测试内容") //必须提供
  3. .setTicker("测试通知到达")
  4. .setWhen(System.currentTimeMillis())
  5. .setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
  6. .setSmallIcon(R.mipmap.ic_launcher_round) //必须提供
  7. .setOngoing(true) // 设置常驻用户无法清除
  8. .setContentIntent(intent) //用于点击通知跳转界面
  9. .setChannelId(CHANNEL_ID); //Android O以上版本必须提供

清除一个消息:传给NotificationManager一个启动时的ID即可删除

mNotificationManager.cancel(mNotificationId-1);

清除所有消息:

mNotificationManager.cancelAll();

演示效果:

 

扩展:自定义Notification的View视图实现QQ音乐播放功能

第一步:准备我们的布局文件,这个布局文件有特殊要求:
仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件
AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件
使用其他View会引起ClassNotFoundException异常。

仿QQ音乐Notification布局如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. >
  7. <ImageView
  8. android:id="@+id/title_icon"
  9. android:layout_width="100dp"
  10. android:layout_height="100dp"
  11. android:layout_marginLeft="16dp"
  12. android:layout_marginTop="8dp"
  13. android:layout_marginBottom="8dp"
  14. android:src="@drawable/title_icon"
  15. android:layout_marginStart="16dp" />
  16. <RelativeLayout
  17. android:layout_width="match_parent"
  18. android:layout_height="100dp"
  19. android:layout_toRightOf="@+id/title_icon"
  20. android:layout_marginRight="16dp"
  21. android:layout_marginTop="8dp"
  22. android:layout_marginBottom="8dp"
  23. android:layout_marginEnd="16dp"
  24. android:layout_toEndOf="@+id/title_icon">
  25. <TextView
  26. android:id="@+id/song_title"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:text="七里香"
  30. android:textSize="20sp"
  31. android:textStyle="bold"
  32. android:layout_marginLeft="16dp"
  33. android:layout_marginTop="16dp"
  34. android:layout_marginStart="16dp" />
  35. <TextView
  36. android:id="@+id/singer"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="周杰伦"
  40. android:layout_marginLeft="16dp"
  41. android:layout_marginTop="4dp"
  42. android:layout_below="@+id/song_title"
  43. android:layout_marginStart="16dp" />
  44. <LinearLayout
  45. android:layout_width="match_parent"
  46. android:layout_height="match_parent"
  47. android:layout_below="@id/singer"
  48. android:weightSum="5"
  49. android:orientation="horizontal"
  50. >
  51. <Button
  52. android:id="@+id/love"
  53. android:layout_width="0dp"
  54. android:layout_height="wrap_content"
  55. android:layout_weight="1"
  56. android:text="@string/song_like"
  57. android:textColor="@android:color/holo_red_light"
  58. android:background="@android:color/transparent"
  59. />
  60. <Button
  61. android:id="@+id/song_back"
  62. android:layout_width="0dp"
  63. android:layout_height="wrap_content"
  64. android:layout_weight="1"
  65. android:text="@string/song_back"
  66. android:textSize="16sp"
  67. android:textColor="@android:color/black"
  68. android:background="@android:color/transparent"
  69. />
  70. <Button
  71. android:id="@+id/song_start"
  72. android:layout_width="0dp"
  73. android:layout_height="wrap_content"
  74. android:layout_weight="1"
  75. android:text="||"
  76. android:textColor="@android:color/black"
  77. android:background="@android:color/transparent"
  78. />
  79. <Button
  80. android:id="@+id/song_front"
  81. android:layout_width="0dp"
  82. android:layout_height="wrap_content"
  83. android:layout_weight="1"
  84. android:text=">"
  85. android:textSize="16sp"
  86. android:textColor="@android:color/black"
  87. android:background="@android:color/transparent"
  88. />
  89. <Button
  90. android:id="@+id/song_font"
  91. android:layout_width="0dp"
  92. android:layout_height="wrap_content"
  93. android:layout_weight="1"
  94. android:text="词"
  95. android:textColor="@android:color/darker_gray"
  96. android:background="@android:color/transparent"
  97. />
  98. </LinearLayout>
  99. <TextView
  100. android:id="@+id/btn_item_close"
  101. android:layout_width="20dp"
  102. android:layout_height="20dp"
  103. android:layout_alignParentEnd="true"
  104. android:layout_alignParentTop="true"
  105. android:layout_alignParentRight="true"
  106. android:gravity="center"
  107. android:text="X"
  108. android:textStyle="bold"
  109. />
  110. </RelativeLayout>
  111. </RelativeLayout>

效果如下:

第二步:

添加通知View,添加点击事件,添加一个Notification

  1. Notification.Builder builder=new Notification.Builder(activity);
  2. Intent in=new Intent("close");
  3. in.setPackage(activity.getPackageName());
  4. PendingIntent intent=PendingIntent.getBroadcast(activity,0
  5. ,in,PendingIntent.FLAG_UPDATE_CURRENT);
  6. MyNotificationView myNotificationView=new MyNotificationView(activity.getPackageName()
  7. ,R.layout.notification_item
  8. ,activity);
  9. myNotificationView.setOnClickPendingIntent(R.id.btn_item_close,intent);
  10. builder.setSmallIcon(R.mipmap.ic_launcher)
  11. .setOngoing(false)
  12. .setAutoCancel(true)
  13. .setCustomContentView(myNotificationView)
  14. .setChannelId(CHANNEL_ID)
  15. .setWhen(SystemClock.currentThreadTimeMillis())
  16. .setContentIntent(intent);
  17. mNotificationManager.notify(mNotificationId++, builder.build());

第三步,写一个广播接受者,接受发出的广播事件

  1. public class MusicReceiver extends BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. String action=intent.getAction();
  5. if (action != null && action.equals("close")) {
  6. if(MainActivity.myHandler!=null){
  7. MainActivity.myHandler.sendEmptyMessage(MainActivity.MESSAGE_CLOSE);
  8. }
  9. }
  10. }
  11. }

项目效果:

点击Toast

 

项目git地址:https://github.com/1104219446/NitificationTest.git

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/320124
推荐阅读
相关标签
  

闽ICP备14008679号