NotificationListenerService是如何启动的?

前言

        简单的继承NotificationListenerService这个抽象类,就可以实现接收/移除系统通知的功能,但是在使用的时候,不知道有哪位同学有过这样的疑惑?这个服务是怎么启动的。看下这个类的源码就会发现,它继承了Service,但是在使用的时候,没有使用startService或bindService来启动,它是怎么启动的呢?

怎么用

简单说下怎么用,继承这个抽象类,重写onNotificationPosted/onNotificationRemoved方法。

按照NotificationListenerService.java源码中,顶部的要求,在AndroidManifest.xml中加入如下图所示代码:

NotificationListenerService是如何启动的?_第1张图片

另外,很重要的一点,代码写完后,还需要在系统设置中设置app的notify使用权限,一般的做法是判断app是否设置了该全下你,没有设置,在app中掉起设置界面,然后来设置权限,掉起设置的代码如下:

Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
            intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

怎么启动

这个Service是怎么启动的呢?

在上面说过,要使用它必须要在设置中设置它的使用权限,其实对应的代码,就是给数据库中写入一条标记位,这个服务就是在写入标记位的时候启动的。

不知道大家对这个东西熟不熟ContentResolver,这个玩意儿有一个方法registerContentObserver

观察者模式,在写入数据库的时候回回调注册的观察者方法,在这方法里启动Service

另外说一下,ContentResolver的registerContentObserver在android framework层里面使用还是很广泛的。

你可能感兴趣的:(Android)