Android 通知使用权(NotificationListenerService)的使用
android 通知使用权(notificationlistenerservice)的使用
简介
当下不少第三方安全app都有消息管理功能或者叫消息盒子功能,它们能管理过滤系统中的一些无用消息,使得消息栏更清爽干净。其实此功能的实现便是使用了android中提供的通知使用权权限。android4.3后加入了通知使用权notificationlistenerservice,就是说当你开发的app拥有此权限后便可以监听当前系统的通知的变化,在android4.4后还扩展了可以获取通知详情信息。下面我们来看看notificationlistenerservice的具体使用。
使用
新建一服务类,使它继承notificationlistenerservice,并实现两个重要的方法:
@targetapi(build.version_codes.jelly_bean_mr2) public class notificationlistener extends notificationlistenerservice { privatestatic final string tag = "notificationlistener"; @override public void onnotificationremoved(statusbarnotification sbn) { log.i(tag,"notification removed"); } @override public void onnotificationposted(statusbarnotification sbn) { log.i(tag, "notification posted"); } }
androidmanifest.xml中声明此服务类,并必须声明bind_notification_listener_service许可和意图过滤器
android.service.notification.notificationlistenerservice,还有我们在系统设置中通知使用权列表中看到的label标签:
<serviceandroid:name=".notificationlistener" android:label="通知使用权测试程序" android:permission="android.permission.bind_notification_listener_service"> <intent-filter> <actionandroid:name="android.service.notification.notificationlistenerservice"/> </intent-filter> </service>
ok,就这么简单就可以完成app监听系统通知栏的功能了。接下来,我们来看看notificationlistenerservice类还提供了一些重要的方法:
statusbarnotification[] sbns = getactivenotifications(); // 返回当前系统所有通知的数组 cancelallnotifications(); // 删除系统中所有可被清除的通知 cancelnotification(string pkg, string tag, int id); // 删除具体某一个通知
还有上面我们提到的两个重要的重写方法:
onnotificationremoved(statusbarnotification sbn); // 通知被移除时回调 onnotificationposted(statusbarnotification sbn); // 增加一条通知时回调
这两个重要的回调方法它们的参数statusbarnotification对象是当前触发变化通知的详细信息。来看下statusbarnotification的使用:
sbn.getid(); // 返回通知对应的id sbn.getnotification(); // 返回通知对象 sbn.getpackagename(); // 返回通知对应的包名 sbn.getposttime(); // 返回通知发起的时间 sbn.gettag(); // 返回通知的tag,如果没有设置返回null sbn.isclearable(); // 返回该通知是否可被清楚,是否为flag_ongoing_event、flag_no_clear sbn.isongoing(); // 返回该通知是否在正在运行的,是否为flag_ongoing_event
其中,getnotification()返回的通知对象,还可以详细看到通知的其它相关信息,如:
notification notification = sbn.getnotification(); notification.contentview; // 通知的remoteviews notification.contentintent; // 通知的pendingintent notification.actions; // 通知的行为数组 // android4.4后还扩展了可以获取通知详情信息 if (build.version.sdk_int >build.version_codes.jelly_bean_mr2) { bundle extras = notification.extras; string notificationtitle = extras.getstring(notification.extra_title); int notificationicon = extras.getint(notification.extra_small_icon); bitmap notificationlargeicon = ((bitmap)extras.getparcelable(notification.extra_large_icon)); charsequence notificationtext = extras.getcharsequence(notification.extra_text); charsequence notificationsubtext = extras.getcharsequence(notification.extra_sub_text); }
跳转系统设置里的通知使用权页面
private boolean gotonotificationaccesssetting(contextcontext) { try { intent intent = new intent("android.settings.action_notification_listener_settings"); intent.addflags(intent.flag_activity_new_task); context.startactivity(intent); return true; } catch(activitynotfoundexception e) { try { intent intent = new intent(); intent.addflags(intent.flag_activity_new_task); componentname cn = new componentname("com.android.settings","com.android.settings.settings$notificationaccesssettingsactivity"); intent.setcomponent(cn); intent.putextra(":settings:show_fragment", "notificationaccesssettings"); context.startactivity(intent); return true; } catch(exception ex) { ex.printstacktrace(); } return false; } }
判断是否拥有通知使用权
private boolean notificationlistenerenable() { boolean enable = false; string packagename = getpackagename(); string flat= settings.secure.getstring(getcontentresolver(),"enabled_notification_listeners"); if (flat != null) { enable= flat.contains(packagename); } return enable; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
推荐阅读
-
Android开发之RadioGroup的简单使用与监听示例
-
Android 通知使用权(NotificationListenerService)的使用
-
Android 消息分发使用EventBus的实例详解
-
android studio 使用adb 命令传递文件到android 设备的方法
-
Android开发中使用Intent打开第三方应用及验证可用性的方法详解
-
Android 使用CoordinatorLayout实现滚动标题栏效果的实例
-
Android中使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作
-
深入理解Android Matrix理论与使用的详解
-
Android Mms之:PDU的使用详解
-
基于Android SDK-在64位Linux中使用需要注意的问题