Android4.3 NotificationListenerServiceを使ってみる
タイトル通り、Android4.3から追加されたらしいNotificationListenerServiceっていうのがある模様。どうやらAccessibilityServiceを使って通知を取得するっていうのは以前にやったけれども、それと同等な事をサクッと出来るようになったっぽい
とりあえずwktkしてるので使ってみた
AndroidManifest.xml
NotificationListenerServiceは名前の通りServiceなので
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="sample.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<service
android:name=".SampleNotificationListenerService"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
</application>
</manifest>
まぁこれはドキュメントに普通に書いてあるので説明する必要ないでしょうという事で
SampleNotificationListenerService.java
package sample.test;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
public class SampleNotificationListenerService extends NotificationListenerService {
private static final String TAG = SampleNotificationListenerService.class.getName();
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
Log.v(TAG, "notify: " + sbn.getNotification().tickerText);
for (StatusBarNotification n : getActiveNotifications()) {
Log.v(TAG, "active: " + n.getNotification().tickerText);
}
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
}
}
通知がぶっ飛ばれてきたらonNotificationPostedが飛んでくる。で引数に指定されるのは飛んできて通知だけで既に存在している通知自体はgetActiveNotificationsを使って取得出来る模様
っていう感じ。で実際に動作させるにあたってエミュレータで検証を行った所だと、「設定」-> 「セキュリティ」から通知の取得設定項目がありNotificationListenerServiceなアプリを入れるとここに表示される。でそれをチェックすると以下のようなダイアログが出る
っていう感じな警告も出る模様。んまぁ設定はこれでオッケーなんだけど、エミュレータだったからなのかは定かじゃないけど、チェックいれてもサービスが起動してないっていうオチがあったりするのでそこ確認しておく事
あとはAPI DemoなNotificationを使って通知を読み取る事が出来る模様
という事でAndroid4.3からはAccessibilityServiceではなくてNotificationListenerServiceを使う事でも出来るという事で