美文网首页
清理手机notification 实现过程

清理手机notification 实现过程

作者: 多多爱美丽 | 来源:发表于2017-12-26 11:39 被阅读0次

    参考http://blog.csdn.net/cankingapp/article/details/50858229
    NotificationListenerService 非常容易的获取通知回调的相关信息
    本次就用NotificationListenerService(NLS)进行通知的清理

    通知的新增和删除,都会回调你注册的NLS里的方法,这些信息可以通过StatusBarNotification类对象来获取。

    重点:系统开启通知读取服务后,系统就会对APP有个保活功能,当被系统或是第三方软件kill后,系统会将你的应用重启。很多厂商会利用这点做一些坏坏的事情。并且国内各大杀毒,清理软件都有开启该功能。

    NotificationListenerService主要方法(成员变量):
    删除通知时会回调onNotificationRemoved, 新增通知或是更新时会回调onNotificationPosted
    
    cancelAllNotifications() :删除系统中所有 可被清除 的通知;
    cancelNotification(String pkg, String tag, int id) :删除具体某一个通知;
    getActiveNotifications() :返回当前系统所有通知到StatusBarNotification[]的列表;
    onNotificationPosted(StatusBarNotification sbn) :当系统收到新的通知后出发回调;
    onNotificationRemoved(StatusBarNotification sbn) :当系统通知被删掉后出发回调;
    

    StatusBarNotification类详解
    StatusBarNotification,多进程传递对象,所有通知信息都会在这个类中通过Binder传递过来.
    内部几个重要的方法如下:

    
    getId():返回通知对应的id;
    getNotification():返回通知对象;
    getPackageName():返回通知对应的包名;
    getPostTime():返回通知发起的时间;
    getTag():返回通知的Tag,如果没有设置返回null;
    isClearable():返回该通知是否可被清楚,FLAG_ONGOING_EVENT、FLAG_NO_CLEAR;
    isOngoing():检查该通知的flag是否为FLAG_ONGOING_EVENT;
    其中,我们通过getNotification()可以得到Notification对象,Notification是我们比较熟悉的类了,我们可以得到通知具体内容甚至可以还原RemoteViews到我们的本地view上。
    

    使用方法

    1. 新建一个类并继承自NotificationListenerService
    public class NLService extends NotificationListenerService {
            @Override
            public void onNotificationPosted(StatusBarNotification sbn) {
            }
    
            @Override
            public void onNotificationRemoved(StatusBarNotification sbn) {
            }
        }
    
    1. 在AndroidManifest.xml中注册Service并声明相关权限;
     <service android:name=".NLService"
              android:label="@string/service_name"
              android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
         <intent-filter>
             <action android:name="android.service.notification.NotificationListenerService" />
         </intent-filter>
       </service>
    
    1. 开启NotificationMonitor的监听功能;
    if (!isEnabled()) {
                    Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
                    startActivity(intent);
                } else {
                    Toast.makeText(this, "已开启服务权限", Toast.LENGTH_LONG).show();
                }
     private boolean isEnabled() {
            String pkgName = getPackageName();
            final String flat = Settings.Secure.getString(getContentResolver(),
                    ENABLED_NOTIFICATION_LISTENERS);
            if (!TextUtils.isEmpty(flat)) {
                final String[] names = flat.split(":");
                for (int i = 0; i < names.length; i++) {
                    final ComponentName cn = ComponentName.unflattenFromString(names[i]);
                    if (cn != null) {
                        if (TextUtils.equals(pkgName, cn.getPackageName())) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    

    github https://github.com/CankingApp/notifymrg
    接下来就要自己实现了~
    希望不要遇到坑

    相关文章

      网友评论

          本文标题:清理手机notification 实现过程

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