Android4.3 NotificationListenerServiceを使ってみる

2013-09-03T00:00:00+00:00 Android Java

タイトル通り、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を使う事でも出来るという事で

リポジトリのファイルを履歴もろとも削除する方法 android.intent.action.ASSIST