techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Android Oの通知チャンネルを使ってみる

Android Oの通知チャンネルを使ってみる

通知チャンネルとは

Android O では、ユーザーが通知を管理できるように、統合されたシステムを提供する通知チャンネルが導入されています。Android O を対象とする場合、通知をユーザーに表示するために、1 つ以上の通知チャンネルを実装する必要があります。Android O を対象としていない場合、アプリは Android O 端末上で実行されても Android 7.0 での動作と同じように動作します。 Android Oに対応したアプリでは必ず通知チャンネルを実装する必要がある

通知チャンネルの作成

通知を表示するためのチャンネルを作成します 通知を作成するときは、チャンネルID、通知名、inportanceを設定します。

    private static final String CHANNEL_ID = "sample_notification_channel";;

    @TargetApi(Build.VERSION_CODES.O)
    private void createChannelIfNeeded() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager mNotificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            CharSequence name = "SampleNotificationName";

            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);

            mChannel.enableLights(true);

            mChannel.setLightColor(Color.RED);
            mChannel.enableVibration(true);

            mNotificationManager.createNotificationChannel(mChannel);
        }
    }

通知チャンネルに設定した内容はアプリの設定画面から閲覧、変更が可能です。 以下のコードで設定画面を開きます。

    private void showNotificationChannelSetting() {
        Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
        intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
        intent.putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID);
        startActivity(intent);
    }

f:id:forestsoftjpdev:20170911014440p:plain:w300

通知の表示

チャンネルの準備が整ったので通知を表示してみます。 通知を作成する際に通知チャンネルのIDを設定します。

    NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this, CHANNEL_ID)
                        .setSmallIcon(R.drawable.ic_adb_white_24dp)
                        .setContentTitle("My notification")
                        .setContentText("Hello World!");
                        
    NotificationManagerCompat manager = NotificationManagerCompat.from(this);
        manager.notify(ID, mBuilder.build());

通知の表示ができました。
f:id:forestsoftjpdev:20170911014506p:plain:w300
また、デフォルトでランチャーのアイコンにバッジが表示されます。 f:id:forestsoftjpdev:20170911014526p:plain:w300

まとめ

  • 優先度・音・バイブレーションの設定はチャンネルに対して行う
  • Notificationに対してチャンネルIDを設定することでどのチャンネルで表示するかを決定する
  • ユーザーはチャンネル毎に細かく表示設定を変更可能

参考URL

Notification Channels and Badges (Java)

Notifications | Android Developers