サーチ…


前書き

通知チャンネルを使用することで、Googleの通知をグループチャンネルにグループ化することができます。ユーザーはチャンネル全体の通知設定を一度に変更することができます。Android Oでは、この機能が導入されました。

構文

  1. class NotificationUtils {} //作成通知チャネル用
  2. createChannel()//通知を作成する一般的なメソッド

パラメーター

方法説明
IMPORTANCE_MAX 未使用
IMPORTANCE_HIGH どこにでも現れ、騒音と覗き見をする
IMPORTANCE_DEFAULT どこにでも見せることができますが、騒音は出ますが、視覚的に侵入しません
IMPORTANCE_LOW どこにでも表示されますが、侵入的ではありません
IMPORTANCE_MIN シェード、折りたたみの下にのみ表示されます
IMPORTANCE_NONE 重要性のない通知。陰に映らない

通知チャネル

通知チャネルとは何ですか?

通知チャンネルを使用することで、アプリ開発者は通知をグループにグループ化することができます。ユーザーはチャネル全体の通知設定を一度に変更できます。たとえば、チャネルごとに、すべての通知を完全にブロックしたり、重要度を上書きしたり、通知バッジを表示したりすることができます。この新しい機能は、アプリのユーザーエクスペリエンスを大幅に向上させるのに役立ちます。

通知チャネルを作成する

 import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Color;
 
public class NotificationUtils extends ContextWrapper {


private NotificationManager mManager;
public static final String ANDROID_CHANNEL_ID = "com.sai.ANDROID";
public static final String IOS_CHANNEL_ID = "com.sai.IOS";
public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
public static final String IOS_CHANNEL_NAME = "IOS CHANNEL";

public NotificationUtils(Context base) {
    super(base);
    createChannels();
}

public void createChannels() {

    // create android channel
    NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
            ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
    // Sets whether notifications posted to this channel should display notification lights
    androidChannel.enableLights(true);
    // Sets whether notification posted to this channel should vibrate.
    androidChannel.enableVibration(true);
    // Sets the notification light color for notifications posted to this channel
    androidChannel.setLightColor(Color.BLUE);
    // Sets whether notifications posted to this channel appear on the lockscreen or not
    androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);

    getManager().createNotificationChannel(androidChannel);

    // create ios channel
    NotificationChannel iosChannel = new NotificationChannel(IOS_CHANNEL_ID,
            IOS_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
    iosChannel.enableLights(true);
    iosChannel.enableVibration(true);
    iosChannel.setLightColor(Color.GRAY);
    iosChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
    getManager().createNotificationChannel(iosChannel);


  }


private NotificationManager getManager() {
    if (mManager == null) {
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }
    return mManager;
}}

上のコードでは、NotificationChannelの2つのインスタンスを作成し、チャネル名にuniqueidを渡し、コンストラクタに重要度レベルを渡しました。通知チャネルごとに、次の特性を適用しました。

  1. ライト
  2. 振動
  3. ロック画面に表示する通知。

最後に、システムからNotificationManagerを取得し、createNotificationChannel()メソッドを呼び出してチャネルを登録し、作成したチャネルを渡します。

createNotificationChannels()で一度に複数の通知チャネルを作成し、NotificationChannelインスタンスのJavaリストを渡すことができます。 getNotificationChannels()でアプリケーションのすべての通知チャネルを取得し、getNotificationChannel()で特定のチャネルを取得し、チャネルIDだけを引数として渡すことができます。

通知チャネルの重要度

方法説明
IMPORTANCE_MAX 未使用
IMPORTANCE_HIGH どこにでも現れ、騒音と覗き見をする
IMPORTANCE_DEFAULT どこにでも見せることができますが、騒音は出ますが、視覚的に侵入しません
IMPORTANCE_LOW どこにでも表示されますが、侵入的ではなく、値は0です
IMPORTANCE_MIN シェード、折りたたみの下にのみ表示されます
IMPORTANCE_NONE 重要性のない通知。陰に映らない

通知の作成とチャンネルへの投稿

NotificationBuilderを使用して別のNotificationUtilsを使用して2つの通知を作成しました。

public Notification.Builder getAndroidChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}
 
public Notification.Builder getIosChannelNotification(String title, String body) {
    return new Notification.Builder(getApplicationContext(), IOS_CHANNEL_ID)
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(android.R.drawable.stat_notify_more)
            .setAutoCancel(true);
}

また、Notification.Builder()を使用してNotificationChannelを設定することもできます。そのためにsetChannel(String channelId)を使用できます。

通知チャネルの設定を更新する

通知チャネルを作成すると、ユーザーは設定と動作を担当します。 createNotificationChannel()を再度呼び出して、既存の通知チャネルの名前を変更したり、その説明を更新したりすることができます。次のサンプルコードでは、アクティビティを開始するためのインテントを作成して、通知チャネルの設定にユーザーをリダイレクトする方法について説明します。この場合、インテントには通知チャネルのIDとアプリのパッケージ名などの拡張データが必要です。

@Override
protected void onCreate(Bundle savedInstanceState) {
    //...
    Button buttonAndroidNotifSettings = (Button) findViewById(R.id.btn_android_notif_settings);
    buttonAndroidNotifSettings.setOnClickListener(new View.OnClickListener() {
     
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
            i.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
            i.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationUtils.ANDROID_CHANNEL_ID);
            startActivity(i);
        }
    });
}

XMLファイル:

<!--...-->
<Button
    android:id="@+id/btn_android_notif_settings"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Notification Settings"/>
<!--...-->

通知チャネルの削除

通知チャネルを削除するには、deleteNotificationChannel()を呼び出します。

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);

MainActivityとxmlを作成する

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_margin="16dp"
        tools:context="com.chikeandroid.tutsplusalerts.MainActivity">
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ Android Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_android_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"/>
 
        <EditText
                android:id="@+id/et_android_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
         
        <Button
                android:id="@+id/btn_send_android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
 
    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="20dp">
 
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuts+ IOS Channel"
                android:layout_gravity="center_horizontal"
                android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
 
        <EditText
                android:id="@+id/et_ios_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Title"
                />
 
        <EditText
                android:id="@+id/et_ios_author"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Author"/>
        <Button
                android:id="@+id/btn_send_ios"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Send"/>
    </LinearLayout>
     
</LinearLayout>

MainActivity.java

MainActivityを編集してEditTextコンポーネントからタイトルと作者を取得し、Androidチャンネルに送ることができます。 NotificationUtilsで作成したAndroidチャンネル用のNotification.Builderを取得し、NotificationManagerに通知します。

import android.app.Notification; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; android.text.TextUtilsをインポートします。 import android.view.View; import android.widget.Button; import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
 
    private NotificationUtils mNotificationUtils;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mNotificationUtils = new NotificationUtils(this);
 
        final EditText editTextTitleAndroid = (EditText) findViewById(R.id.et_android_title);
        final EditText editTextAuthorAndroid = (EditText) findViewById(R.id.et_android_author);
        Button buttonAndroid = (Button) findViewById(R.id.btn_send_android);
 
        buttonAndroid.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String title = editTextTitleAndroid.getText().toString();
                String author = editTextAuthorAndroid.getText().toString();
 
                if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(author)) {
                    Notification.Builder nb = mNotificationUtils.
                            getAndroidChannelNotification(title, "By " + author);
 
                    mNotificationUtils.getManager().notify(107, nb.build());
                }
            }
        });
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow