7
7

More than 1 year has passed since last update.

システムの通知設定からアプリを起動させる方法

Posted at

Androidではシステム設定にあるアプリの通知設定画面にアプリの設定画面を起動するリンクを設置することができます。
「アプリ内のその他の設定」というのがそれになります。
残念ながら「アプリ内のその他の設定」というテキストを変更することはできません。

設定なしの場合 設定ありの場合

また、通知チャンネルごとの設定画面にも同様のリンクを表示させることができます。

設定なしの場合 設定ありの場合

設定画面にリンクを設定する方法

アプリ内のActivityにandroid.intent.category.NOTIFICATION_PREFERENCESというカテゴリーのintent-filterを設定すると、システム設定からアプリが起動できる画面を持っていると認識されるようになり、リンクが表示されます。

<activity
    android:name=".SettingActivity"
    android:exported="true"
    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
    </intent-filter>
</activity>

このカテゴリーの値はNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCESで定義されています。

チャンネル設定内から起動した場合は、android.intent.extra.CHANNEL_IDというKeyでチャンネルIDが、また、NotificationChannelGroupを設定している場合は、android.intent.extra.CHANNEL_GROUP_IDというKeyでチャンネルグループIDがExtraに格納されています、通知設定のルートからの場合はExtraは設定されていません。
これらもNotification.EXTRA_CHANNEL_IDNotification.EXTRA_CHANNEL_GROUP_IDで値が定義されています。
Intentを受けて何らかの処理を行う場合は、以下のように実装することになると思います。

if (intent.hasCategory(Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES)) {
    val channelId = intent.getStringExtra(Notification.EXTRA_CHANNEL_ID)
    val groupId = intent.getStringExtra(Notification.EXTRA_CHANNEL_GROUP_ID)
    ...
}

似たような定義値で、アプリからシステム設定を開くときにチャンネルIDを指定するSettings.EXTRA_CHANNEL_IDandroid.provider.extra.CHANNEL_IDという値になっていて、違う値なのでご注意ください。

以上です。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7