Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidで通知の発行を検知する方法!NotificationListenerServiceの実装手順を解説

このチュートリアルでは、Androidアプリで通知が発行されたタイミングを検知して受け取る方法を、実際のコード例とともに解説します。通知リスナー(NotificationListenerService)を活用した仕組みの基本を、ステップごとにわかりやすく紹介していきます。

Step 1:Android Studioで新規プロジェクトを作成する

まずはAndroid Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成しましょう。必要な項目(プロジェクト名、パッケージ名、保存先など)をすべて入力して、プロジェクトの雛形を生成します。

Step 2:レイアウトファイル(activity_main.xml)にコードを追加する

次に、「res/layout/activity_main.xml」に以下のコードを記述します。ここでは、画面中央に「Create Notification」というボタンを1つ配置するシンプルなレイアウトを作成しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnCreateNotification"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_centerInParent="true"
        android:text="Create Notification" />

</RelativeLayout>

Step 3:MainActivityに通知生成処理を実装する

続いて、「src/MainActivity.java」に以下のコードを追加します。ボタンがタップされると、NotificationCompat.Builderを使って通知を構築し、NotificationManager経由で発行する仕組みです。Android 8.0(API レベル 26)以降では通知チャンネルの作成が必須となるため、SDKバージョンを判定してチャンネルを生成している点にも注目してください。

package app.tutorialspoint.com.notifyme;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    public static final String NOTIFICATION_CHANNEL_ID = "10001";
    private final static String default_notification_channel_id = "default";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void createNotification(View view) {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this, default_notification_channel_id);
        mBuilder.setContentTitle("My Notification");
        mBuilder.setContentText("Notification Listener Service Example");
        mBuilder.setTicker("Notification Listener Service Example");
        mBuilder.setSmallIcon(R.drawable.ic_launcher_foreground);
        mBuilder.setAutoCancel(true);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
            mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
            assert mNotificationManager != null;
            mNotificationManager.createNotificationChannel(notificationChannel);
        }
        assert mNotificationManager != null;
        mNotificationManager.notify((int) System.currentTimeMillis(), mBuilder.build());
    }
}

Step 4:AndroidManifest.xmlにコードを追加する

最後に、「AndroidManifest.xml」に以下のコードを記述します。ここではバイブレーション権限(VIBRATE)の宣言と、MainActivityをランチャーアクティビティとして登録しています。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.tutorialspoint.com.notifyme">

    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

アプリを実行して動作を確認しよう

それでは、実際にアプリを起動して動作を確認してみましょう。Android端末をPCに接続した状態で、Android Studioのツールバーにある「Run」アイコンをクリックします。デバイス選択画面で自分のスマートフォンを選択すると、端末の画面にアプリが起動し、中央に配置された「Create Notification」ボタンが表示されます。

Androidで通知の発行を検知する方法!NotificationListenerServiceの実装手順を解説

ボタンをタップすると、ステータスバーに「My Notification」というタイトルの通知が発行されます。これで、通知を生成する側の実装は完了です。

Androidで通知の発行を検知する方法!NotificationListenerServiceの実装手順を解説

まとめ

本記事では、Androidアプリ内で通知を発行する基本的な流れを、レイアウト・アクティビティ・マニフェストの3つのファイルに分けて解説しました。通知チャンネルへの対応など、Android 8.0以降で必要となるポイントも押さえています。この仕組みをベースにNotificationListenerServiceを組み合わせれば、他アプリが発行した通知を受け取って処理することも可能になりますので、ぜひ応用してみてください。

  1. Androidでリマインダー通知を実装する方法を初心者向けに解説

    この記事では、Androidアプリで毎日決まった時刻に通知を表示する「リマインダー通知」の実装方法を、サンプルコードとともにステップごとに解説します。AlarmManagerとServiceを組み合わせることで、アプリが起動していなくても指定時刻に通知を届けられる仕組みを作れます。全体の仕組み本サンプルでは、以下の流れでリマインダー通知を実現します。1. 画面上のボタンをタップすると、翌日の午前0時に通知を発行するようAlarmManagerに登録します。2. 指定時刻になるとシステムがNotifyService(Serviceクラス)を起動します。3. Service内でNotificati

  2. 【Android】Spinner(スピナー)で選択された値を取得する方法を徹底解説

    AndroidでSpinnerの値を取得するには? このチュートリアルでは、AndroidアプリでSpinner(スピナー/ドロップダウンリスト)からユーザーが選択した値を取得し、Toastで表示する方法をサンプルコード付きで解説します。Spinnerは、複数の選択肢の中から1つだけを選ばせたい場合に便利なUIコンポーネントです。 ステップ1:新規プロジェクトを作成する Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 ステップ2:レイアウトファイル(activity_