通知チャンネルを作成して管理する

Android 8.0(API レベル 26)以降では、すべての通知を 。チャンネルごとに、動画の映像と音声の挙動を設定できます。 そのチャンネルのすべての通知に適用されます。ユーザーは以下の設定を変更できます アプリのどの通知チャネルが煩わしいものなのか、 表示されます。

チャンネルの概要やその他の通知については、次の動画をご覧ください。 Android 8.0 の新機能です。

通知チャンネルのユーザー設定は、 設定を行う必要があります。

図 1. 時計アプリの通知設定 そのチャンネルの 1 つです

通知チャンネルを作成した後は、通知を変更できません。 サポートします。この時点ではユーザーが完全に制御できます。ただし、 チャンネルの名前と説明を変更する。

送信する必要がある通知のタイプごとにチャネルを作成します。また、 通知チャンネルを作成してユーザーの選択を反映させます。たとえば、 作成した会話グループごとに個別の通知チャンネルを設定できます。 メッセージ アプリのユーザー。

Android 8.0(API レベル 26)以降をターゲットとする場合は、以下のいずれかまたは両方を実装する必要があります。 できます。targetSdkVersion が 25 以下に設定されている場合は、 Android 8.0(API レベル 26)以降で動作しているアプリは、 Android 7.1(API レベル 25)以前を搭載したデバイスと同様です。

通知チャネルを作成する

通知チャネルを作成する手順は次のとおりです。

  1. モデルを NotificationChannel オブジェクト 固有のチャンネル ID、ユーザーに表示される名前、重要度を設定できます。

  2. (省略可)システム設定でユーザーに表示される説明を指定します。 setDescription()

  3. 通知チャネルを createNotificationChannel()

で確認できます。

次の例は、通知チャンネルを作成して登録する方法を示しています。

Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val name = getString(R.string.channel_name)
    val descriptionText = getString(R.string.channel_description)
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = descriptionText
    // Register the channel with the system. You can't change the importance
    // or other notification behaviors after this.
    val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(mChannel)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

既存の通知チャンネルを元の値で再作成すると、 そのため、アプリの起動時にこのコードを安全に呼び出せます。

デフォルトでは、特定のチャンネルに投稿されるすべての通知で、ビジュアルと通知の 重要度レベルで定義された聴覚の動作を NotificationManagerCompat クラスの変数を IMPORTANCE_DEFAULT または IMPORTANCE_HIGH。 詳細については、次のセクションをご覧ください。 重要度を確認します。

チャンネルのデフォルトの通知動作をさらにカスタマイズする場合は、 次のようなメソッドを呼び出して、 enableLights() setLightColor(), および setVibrationPattern()NotificationChannel)チャンネルを作成すると、 これらの設定は変更できず、ユーザーがこれらの設定を 動作がアクティブです。

次のようにして、1 回の操作で複数の通知チャンネルを作成することもできます。 通話中 createNotificationChannels()

重要度を設定する

チャンネルの重要度は、 できます。NotificationChannel コンストラクタで、次のいずれかを使用して指定します。 5 つの重要度レベルがあります。 IMPORTANCE_NONE(0) から IMPORTANCE_HIGH(4)

Android 7.1(API レベル 25)以前を搭載しているデバイスをサポートするには、 発信 setPriority() 優先度定数を使用して、 NotificationCompat クラスです。

重要度(NotificationManager.IMPORTANCE_*)と優先度 (NotificationCompat.PRIORITY_*)定数はユーザーに表示される重要度にマッピングされます いくつかのオプションがあります。

ユーザーへの表示の重要度 重要度(Android 8.0 以上) 優先度(Android 7.1 以前)
緊急
音が鳴り、ヘッドアップ通知として表示されます。
IMPORTANCE_HIGH PRIORITY_HIGH または PRIORITY_MAX

音が鳴ります。
IMPORTANCE_DEFAULT PRIORITY_DEFAULT

音は鳴りません。
IMPORTANCE_LOW PRIORITY_LOW

音は鳴らず、ステータスバーにも表示されません。
IMPORTANCE_MIN PRIORITY_MIN
なし
音は鳴らず、ステータスバーやシェードにも表示されません。
IMPORTANCE_NONE N/A

重要度に関係なく、すべての通知が邪魔にならないシステムに表示される 通知ドロワー内や ランチャー アイコンのバッジ でも 通知バッジの外観の変更

チャンネルを送信すると、 NotificationManager さん、あなた 重要度レベルは変更できませんただし、ユーザーは いつでも行えます。

適切な優先度を選択する方法については、「優先度」を参照してください。 "の 通知設計ガイド

通知チャネル設定を読み取る

ユーザーは通知チャンネルの設定(動作など)を変更できる バイブレーションやアラート音などですユーザーの設定について知りたい場合は、 確認するには、次の手順を行います。

  1. 次を呼び出して NotificationChannel オブジェクトを取得します。 getNotificationChannel() または getNotificationChannels()

  2. 次のような特定のチャンネル設定をクエリする getVibrationPattern() getSound()getImportance()

本来の行為を妨げていると思われるチャンネル設定を検出した場合 変更するようユーザーに提案し、変更へのアクションを [チャンネル設定] を開きます(次のセクションをご覧ください)。

通知チャネル設定を開く

通知チャンネルを作成した後は、通知を変更できません。 視覚的、聴覚的な動作をプログラマティックに特定できます。ユーザーのみが システム設定からチャンネルの動作を変更できる。ユーザーに これらの通知設定に簡単にアクセスするには、アプリの 設定 UI からこのシステム設定を開くことができます。

通知チャンネルのシステム設定は、 Intent: ACTION_CHANNEL_NOTIFICATION_SETTINGS できます。

たとえば、次のサンプルコードは、ユーザーを 通知チャンネルの設定:

Kotlin

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

インテントには、アプリのパッケージ名を指定する 2 つのエクストラが必要です。 (アプリケーション ID)と編集するチャネルを指定します。

通知チャネルを削除する

呼び出しを行うと、通知チャンネルを削除できます。 deleteNotificationChannel()。 次のサンプルコードは、このプロセスを完了する方法を示しています。

Kotlin

// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)

Java

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);

通知チャネル グループを作成する

設定 UI でチャンネルの外観をさらに整理するには、 チャネルグループを作成できますこの方法は、アプリがサポート対象の ユーザー アカウント(ユーザー アカウントなど)を 仕事用プロファイルを利用できます。これにより、 通知チャンネルグループを作成します。こうすることで 同じ名前の複数の通知チャンネルを制御できるようになります。

図 2. 通知チャンネル設定 管理することもできます。

たとえば、ソーシャル ネットワーク アプリには、個人用と仕事用のサポートが含まれる場合があります。 できます。このシナリオでは、各アカウントで複数の通知が必要になる可能性があります。 次のような、同一の機能と名前を持つ複数のチャネルから構成されます。

  • 2 つのチャンネルを持つ個人アカウント:

    • 新しいコメント

    • おすすめの投稿

  • 2 つのチャネルを持つビジネス アカウント:

    • 新しいコメント

    • おすすめの投稿

アカウントごとに通知チャンネルをグループにまとめると、 区別する必要があります

各通知チャンネル グループには ID が必要です。ID は通知チャンネル内で一意である必要があります。 ユーザーに公開される名前を指定します次のスニペットは、 通知チャンネル グループを作成します。

Kotlin

// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

新しいグループを作成したら、 setGroup() 新しい NotificationChannel オブジェクトをグループに関連付けます。

チャンネルを通知マネージャーに送信すると、 関連付けを簡単に特定できます。