【笔记】Android NotificationListenerService监听短信、来电、微信、QQ等通知消息

最近和一个做手环的公司对接,封装了一堆蓝牙的接口,然后那些消息的监听什么的不给,只能自己去实现。

不得不说非常幸运,NotificationListenerService正好是API 18开始加入的,而蓝牙BLE最低支持的就是18。

根据API的描述,我们发现只需要两步就能实现通知的监听:

1、实现Service

创建一个实现NotificationListenerService的服务,如果只是监听通知的显示和取消只需要在服务里重写通知显示监听onNotificationPosted和通知移除onNotificationRemoved即可。

[java]
  1. /**
  2.  * 通知监听服务
  3.  *
  4.  * @author SJL
  5.  * @date 2017/5/22 22:21
  6.  */
  7. public class NLService extends NotificationListenerService {
  8.     @Override
  9.     public void onNotificationPosted(StatusBarNotification sbn) {
  10.         super.onNotificationPosted(sbn);
  11.     }
  12.     @Override
  13.     public void onNotificationRemoved(StatusBarNotification sbn) {
  14.         super.onNotificationRemoved(sbn);
  15.     }
  16. }

2、配置Manifest

在我们创建Service的时候,Manifest中已经有service节点的配置生成了,我们只需要配置一下权限和过滤器即可,非常方便。

[html]
  1. <service
  2.     android:name=“.NLService”
  3.     android:permission=“android.permission.BIND_NOTIFICATION_LISTENER_SERVICE”>
  4.     <intent-filter>
  5.         <action android:name=“android.service.notification.NotificationListenerService” />
  6.     </intent-filter>
  7. </service>

3、权限问题

只需要以上两步就能实现通知消息的监听确实很方便,但谷歌仍给我们留了个坑——权限问题。

与之前的悬浮窗问题一样,监听通知栏的消息也需要用户手动去授权。

判断是否已授权,使用了v7兼容库中方法,超方便

[java]
  1. /**
  2.  * 是否已授权
  3.  *
  4.  * @return
  5.  */
  6. private boolean isNotificationServiceEnable() {
  7.     return NotificationManagerCompat.getEnabledListenerPackages(this).contains(getPackageName());
  8. }

跳转通知授权界面

[java]
  1. startActivity(new Intent(“android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS”));

源码

发表回复

您的电子邮箱地址不会被公开。