您的位置:首页 > 移动开发 > 微信开发

添加第三方聊天软件QQ/微信/Twitter等桌面角标---NotificationListenerService

2017-06-27 12:56 501 查看
应客户需求研究添加第三方聊天软件QQ/微信/Twitter/易信等桌面图标添加角标,以显示最新消息数,而掉入此坑。

幸而看到其他博文和底层代码,了解到——NotificationListenerService,能让应用获取到其他应用发送的通知,是android在4.3版本后新加入的。拨开云雾见青天,甚是欢喜。废话不多,我们直接看实现:

<1>继承自NotificationListenerService,新增通知或是更新时会回调Posted,通知被移除时会回调Removed,

public class MsgNotificationListenerService extends NotificationListenerService {

@Override
public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
super.onNotificationPosted(sbn, rankingMap);
}

@Override
public void onNotificationRemoved(StatusBarNotification sbn, RankingMap rankingMap) {
super.onNotificationRemoved(sbn, rankingMap);
}
}


StatusBarNotification包含更多的通知详情。getNotification()返回我们所熟悉的Notification对象。Facebook/Twitter/陌陌等通知数可以通过notification.number获取;QQ/易信、陌陌新通知会覆盖旧通知,未读消息都是带在通知里面的。

需注意getId()/getTag()不同,StatusBarNotification可能不一样。小平台适配应用,考虑的因素太多,此坑太深,慎入。

<2>在AndroidManifest.xml添加注册和获取权限

<service android:name=".MsgNotificationListenerService"
android:label="@string/app_name"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>


<3>开启通知使用权

a.Acticity直接跳转

Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(this);
if (!packageNames.contains(getPackageName())) {
startActivityForResult(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"), 0);
}


b.在settings->Apps->Configure apps->Special access->Notification access->开启相应应用的通知使用权。

<4>关于接收不到通知。根本原因是Service被杀掉,重新绑定,不生效。

请参考:http://blog.csdn.net/zrj244265428/article/details/68958358

以上参考,安卓通知栏管理详解及分析 NotificationListenerService:http://blog.csdn.net/cankingapp/article/details/50858229
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: