はじめに
Androidでは、アプリが必要な権限を持っていれば、アプリから端末の設定(一部)を変更することができます。
この仕組はアプリが必要とする機能を確実に使用するためには有用ですが、インストール時に設定変更権限が必要な旨がダイアログ表示されてしまい、ユーザから敬遠される恐れもあります。
また、端末設定の変更ロジックに問題があった場合、影響範囲がアプリだけに収まらなくなります。
Androidでは上記のようなアプリから直接設定を変更する方法の他に、設定アプリの各画面へ簡単にアクセスする方法も提供されています。
android.provider.Settings
クラスにはAndroidの各機能設定画面を呼び出すIntent
のAction
が定義されており、遷移先の設定画面でユーザ自身に必要な設定を行わせることができます。
この場合には自アプリには権限が必要ないため、インストール時の敬遠リスクは下がり、設定変更ロジックも書かなくて良いため実装コストは軽くなります。
この記事では、android.provider.Settings
クラスのアクション一覧を簡単な解説つきで列挙します。
キャプチャはAPI level 19未満で表示できるものはGalaxy Nexus@Android 4.3、API level 19以降が必要なものについてはNexus5@Android L Developer Previewを使用しています。
参考URL:
http://developer.android.com/reference/android/provider/Settings.html
注意点
生成したIntent
で呼び出される画面は端末の種類(メーカー)、OSのバージョンなどによって変わります。
同じ画面構成であっても見た目が同じとは限らないので、ヘルプなどを書く際には注意が必要です。
また、基本的にAction
を指定した暗黙的インテントになるため、環境によっては複数のActivity
の<intent-filter>
に引っかかる場合があります。
逆に、<uses-feature>
の設定などによっては対象Activity
が見つからないことも考えられます。
どの設定画面への遷移を利用する場合でも、Intent
の対象となるアクティビティが存在するかどうかを確認後、遷移するようにしてください。
ACTION_ACCESSIBILITY_SETTINGS
API level 5から追加。
ユーザ補助設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);
ACTION_ADD_ACCOUNT
API level 8から追加。
アカウントの追加画面(アカウントの種別選択画面)のアクション。
Settings.EXTRA_ACCOUNT_TYPES
にaccount_type
を指定(String[]
形式)することで追加対象のアカウントをフィルタリング可能。
Settings.EXTRA_AUTHORITIES
にsyncable="true"
なContentProvider
のauthorities
を指定(String[]
形式)することで追加対象のアカウントをフィルタリング可能。
フィルタリングの結果、追加対象のアカウントが特定された場合は選択画面を経由せず、直接対象アカウントの追加画面を表示する。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_ADD_ACCOUNT);
// 対象をGoogleアカウントに限定
intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES,new String[]{"com.google"});
startActivity(intent);
ACTION_AIRPLANE_MODE_SETTINGS
API level 3から追加。
機内モードの設定が可能な画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
startActivity(intent);
ACTION_APN_SETTINGS
API level 1から追加。
APNの設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APN_SETTINGS);
startActivity(intent);
ACTION_APPLICATION_DETAILS_SETTINGS
API level9から追加。
指定したアプリケーションの詳細設定画面のアクション。
アプリケーションの指定はパッケージURI形式(package:com.my.app
)でsetData()
する。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:com.android.settings"));
startActivity(intent);
ACTION_APPLICATION_DEVELOPMENT_SETTINGS
API level 3から追加。
開発者向けオプション画面のアクション。
開発者向けオプションを有効にしていない場合にどうなるかは不明。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
startActivity(intent);
ACTION_APPLICATION_SETTINGS
API level 1から追加。
アプリケーションに関する設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
startActivity(intent);
ACTION_BLUETOOTH_SETTINGS
API level 1から追加。
Bluetooth設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intent);
ACTION_CAPTIONING_SETTINGS
API level 19から追加。
Kitkatから追加されたユーザ補助設定のうち、ビデオキャプション設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_CAPTIONING_SETTINGS);
startActivity(intent);
ACTION_DATA_ROAMING_SETTINGS
API level 3から追加。
データローミング設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_DATA_ROAMING_SETTINGS);
startActivity(intent);
ACTION_DATE_SETTINGS
API level 1から追加。
日付と時刻設定画面のアクション
Intent intent = new Intent();
intent.setAction(Settings.ACTION_DATE_SETTINGS);
startActivity(intent);
ACTION_DEVICE_INFO_SETTINGS
API level 8から追加。
端末の状態画面のアクション。
Android L Developer Previewではなぜかクラッシュする。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_DEVICE_INFO_SETTINGS);
startActivity(intent);
ACTION_DISPLAY_SETTINGS
API level 1から追加。
ディスプレイ設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_DISPLAY_SETTINGS);
startActivity(intent);
ACTION_DREAM_SETTINGS
API level 18から追加。
JELLY_BEAN_MR1で追加されたDaydream(スクリーンセーバー)設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_DREAM_SETTINGS);
startActivity(intent);
ACTION_INPUT_METHOD_SETTINGS
API level 3から追加。
言語と入力設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_INPUT_METHOD_SETTINGS);
startActivity(intent);
ACTION_INPUT_METHOD_SUBTYPE_SETTINGS
API level 11から追加。
インプットメソッド(文字入力アプリ)のサブタイプ設定画面のアクション。
Settings.EXTRA_INPUT_METHOD_ID
にInputMethodInfo#getId()
で取得したidを指定することでサブタイプを指定できるらしいが未検証。
Nexus5では、Settings.EXTRA_INPUT_METHOD_ID
に何も設定しないとgoogleキーボードの入力言語設定が表示される。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS);
startActivity(intent);
ACTION_INTERNAL_STORAGE_SETTINGS
API level 3から追加。
内部ストレージ設定画面のアクション。
このアクションは端末ごとの差異が激しいかもしれない。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_INTERNAL_STORAGE_SETTINGS);
startActivity(intent);
ACTION_LOCALE_SETTINGS
API level 1から追加。
端末の言語設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCALE_SETTINGS);
startActivity(intent);
ACTION_LOCATION_SOURCE_SETTINGS
API level 1から追加。
位置情報アクセス設定画面のアクション。
位置情報の取得モードを切り替えさせるのに使うっぽい。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
API level 9から追加。
すべてのアプリケーション情報画面のアクション。
アプリ設定画面の「すべて」タブのこと。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS);
startActivity(intent);
ACTION_MANAGE_APPLICATIONS_SETTINGS
API level 3から追加。
アプリ管理画面のアクション。
ACTION_APPLICATION_SETTINGS
と同じ画面が表示された。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
startActivity(intent);
ACTION_MEMORY_CARD_SETTINGS
API level 3から追加。
外部ストレージ設定画面のアクション。
このアクションは端末ごとの差異が激しいかもしれない。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MEMORY_CARD_SETTINGS);
startActivity(intent);
ACTION_NETWORK_OPERATOR_SETTINGS
API level 3から追加。
利用可能なネットワーク設定画面のアクション。
表示と同時に利用可能なネットワークの検索が始まる。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
startActivity(intent);
ACTION_NFCSHARING_SETTINGS
API level 14から追加。
ICE_CREAM_SANDWICH
から追加されたAndroidビーム設定画面のアクション。
Androidビームの有効/無効はNfcAdapter#isNdefPushEnabled()
で確認できる。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_NFCSHARING_SETTINGS);
startActivity(intent);
ACTION_NFC_PAYMENT_SETTINGS
API level 19から追加。
KITKAT
から追加されたタップ&ペイ設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_NFC_PAYMENT_SETTINGS);
startActivity(intent);
ACTION_NFC_SETTINGS
API level 16から追加。
NFC設定画面のアクション。
Nexusなどでは無線とネットワーク画面内のチェックボックス。
NFCが追加されたのはAPI level 14からだが、この定数はAPI level 16からなので注意。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_NFC_SETTINGS);
startActivity(intent);
ACTION_PRINT_SETTINGS
API level 19から追加。
KITKAT
で追加された印刷サービス設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_PRINT_SETTINGS);
startActivity(intent);
ACTION_PRIVACY_SETTINGS
API level 5から追加。
プライバシー設定画面のアクション。
Nexusではバックアップとリセット画面が相当。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_PRIVACY_SETTINGS);
startActivity(intent);
ACTION_QUICK_LAUNCH_SETTINGS
API level 3から追加。
Searchキーと他キーの同時押しで起動するアプリ設定画面のアクション。
この機能自体を知らなかった。ハードウェアキーボードが存在する端末向きだろうか?
Android L Developer Previewではクラッシュする。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_QUICK_LAUNCH_SETTINGS);
startActivity(intent);
ACTION_SEARCH_SETTINGS
API level 8から追加。
検索設定画面のアクション。
NexusではGoogle検索アプリの設定画面が表示される。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SEARCH_SETTINGS);
startActivity(intent);
ACTION_SECURITY_SETTINGS
API level 1から追加。
端末のセキュリティ設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SECURITY_SETTINGS);
startActivity(intent);
ACTION_SETTINGS
API level 1から追加。
設定アプリのアクション(設定アプリの起動)。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SETTINGS);
startActivity(intent);
ACTION_SOUND_SETTINGS
API level 1から追加。
端末の音関連設定のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SOUND_SETTINGS);
startActivity(intent);
ACTION_SYNC_SETTINGS
API level 3から追加。
アカウントの同期設定のアクション。
Settings.EXTRA_AUTHORITIES
でSyncAdapter
のauthorities
を指定することで直接その同期設定が開けるようだが未検証。
Settings.EXTRA_AUTHORITIES
未設定の場合は設定済み同期一覧が表示される。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_SYNC_SETTINGS);
startActivity(intent);
ACTION_USER_DICTIONARY_SETTINGS
API level 3から追加。
ユーザー辞書設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_USER_DICTIONARY_SETTINGS);
startActivity(intent);
ACTION_WIFI_IP_SETTINGS
API level 3から追加。
Wi-Fi接続時のIP設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_WIFI_IP_SETTINGS);
startActivity(intent);
ACTION_WIFI_SETTINGS
API level 1から追加。
Wi-Fi設定画面のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_WIFI_SETTINGS);
startActivity(intent);
ACTION_WIRELESS_SETTING
API level 1から追加。
無線とネットワーク設定のアクション。
Intent intent = new Intent();
intent.setAction(Settings.ACTION_WIRELESS_SETTING);
startActivity(intent);