web-dev-qa-db-ja.com

Android O Apiから通知チャネルを作成する正しい方法

Android O(API 26)バージョンから導入された通知チャネルです。次のリンクからそれについて読みました:

質問:

  1. 通知の数が複数ある場合、アプリケーションの起動時に通知チャネルを作成し、それをApplicationScopeに維持することは良い考えですか?

    _public void addNotificationChannels(Context context) {
    
        List<NotificationChannel> channels = new ArrayList<>();
        channels.add("channel_1");
        channels.add("channel_2");
        .
        .
        channels.add("channel_7");
    
        NotificationManager notificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannels(channels);
    
    }
    _
  2. 通知マネージャーにチャネルを追加する前にこの行を実行しようとするとどうなりますかnew Notification.Builder(getApplicationContext(), PRIMARY_CHANNEL)

12
sam_k

私がやっていることは アプリケーションクラス (アプリのマニフェストをクラス名で更新することを忘れないでください)を拡張し、onCreateメソッド。これにより、通知の作成時に通知チャネルが常に作成されることが保証されます。

私見では、通知ごとに通知チャネルを何度も作成する(試行する)ことは、CPUサイクルの無駄です。

余談ですが、私は常にこの方法でもアプリのバージョンをログに記録します。これは、誰かがlogcatを送信するときに非常に役立ちます。

9
M66B
  1. 理想的には、通知を投稿するときにチャネルを作成する必要があります。以前に使用したのと同じIDでcreateNotificationChannelを呼び出しても安全です。再作成されません。
  2. アプリケーションはこの通知を投稿しません。アプリがこの通知の投稿を許可されていないことを警告するトーストが表示される場合があります。
6
Arnav M.

私は2つの賢明な方法があると思います:
1。 Applicationサブクラスですべてのチャネルを作成し、
2。メインのアクティビティですべてのチャネルを作成します。これは最初にアプリから始まります。

0
Matt

A)ドキュメントのとおり:

元の値で既存の通知チャネルを作成しても何も実行されないため、アプリを起動するときにこのコードを呼び出しても安全です。

したがって、通知自体を作成すると同時に通知チャネルを安全に作成できます。チャネルがすでに作成されているかどうかを確認する必要はありません。

B)アプリケーション内または任意のアクティビティ/フラグメント。

注:未加工のFCMを使用している場合、プッシュペイロードパラメータAndroid_channel_id、アプリですでに作成されている特定のチャネルにそのプッシュを関連付けることができます。

FCMペイロード: https://firebase.google.com/docs/cloud-messaging/http-server-ref

0
Ricard