Android系統通知監聽方案
阿新 • • 發佈:2019-01-08
1.繼承NotificationListenerService類,複寫兩個方法
public class NLService extends NotificationListenerService { @Override public void onNotificationPosted(StatusBarNotification sbn) { } @Override public void onNotificationRemoved(StatusBarNotification sbn) { } }
2.在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>
3.配置系統級許可權
1 、通過shareduserid來獲取系統許可權
(1) 在AndroidManifest.xml中新增android:sharedUserId="android.uid.system"
(2) 在Android.mk檔案裡面新增LOCAL_CERTIFICATE := platform(使用系統簽名)
(3) 在原始碼下面進行mm編譯,這樣生成的apk能夠獲取system許可權,可以在任意system許可權目錄下面進行目錄或者檔案的建立,以及訪問其他apk2、使用手機的platform平臺簽名後,能夠獲取到系統許可權。
1>在AndroidManifest.xml設定android:sharedUserId="android.uid.system"。
2>編譯通過後,從eclipse匯出未簽名的SetGPS.apk。
3>使用\out\host\Linux-x86\framework\signapk.jar +\build\target\product\security\platform.pk8 +platform.x509.pem
把這三個檔案放到同一個檔案中
4>執行“Java -jar signapk.jar platform.x509.pem platform.pk8 SetGPS.apk SetGPSSigned.apk”做平臺簽名得到SetGPSSigned.apk。
這樣不用root push到system/app/ ,直接 install 安裝後即可使用。
4.程式碼增加授權
Settings.Secure.putString(this.getContentResolver(), "enabled_notification_listeners",
new ComponentName(getApplicationContext(), com.example.notification.NotificationMonitorService.class).flattenToString());