設定画面のインテントアクションまとめ

## はじめに
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から追加。
ユーザ補助設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_ACCESSIBILITY_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/875965a1-1997-0d9e-a801-f46a4dc9a81f.png" />

## ACTION_ADD_ACCOUNT
API level 8から追加。
アカウントの追加画面(アカウントの種別選択画面)のアクション。
`Settings.EXTRA_ACCOUNT_TYPES`に`account_type`を指定(`String[]`形式)することで追加対象のアカウントをフィルタリング可能。
`Settings.EXTRA_AUTHORITIES`に`syncable="true"`な`ContentProvider`の`authorities`を指定(`String[]`形式)することで追加対象のアカウントをフィルタリング可能。
フィルタリングの結果、追加対象のアカウントが特定された場合は選択画面を経由せず、直接対象アカウントの追加画面を表示する。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_ADD_ACCOUNT);
    // 対象をGoogleアカウントに限定
    intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES,new String[]{"com.google"});
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/a3ff2818-a1be-98a4-21af-abb9a4d0dc44.png" />

## ACTION_AIRPLANE_MODE_SETTINGS
API level 3から追加。
機内モードの設定が可能な画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/827e2495-5772-f314-5e47-0e0bb673c968.png" />

## ACTION_APN_SETTINGS
API level 1から追加。
APNの設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APN_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/12c1b15e-8f47-10cd-b817-5e2f2f0de183.png" />

## ACTION_APPLICATION_DETAILS_SETTINGS
API level9から追加。
指定したアプリケーションの詳細設定画面のアクション。
アプリケーションの指定はパッケージURI形式(`package:com.my.app`)で`setData()`する。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.parse("package:com.android.settings"));
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/89a418da-d787-7da1-1341-a0f9beb61543.png" />

## ACTION_APPLICATION_DEVELOPMENT_SETTINGS
API level 3から追加。
開発者向けオプション画面のアクション。
開発者向けオプションを有効にしていない場合にどうなるかは不明。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/6facfb23-ff17-db92-3298-2e1e1bf7d4e8.png" />

## ACTION_APPLICATION_SETTINGS
API level 1から追加。
アプリケーションに関する設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/735aa03b-4776-18b1-ac36-f998298a8a4a.png" />

## ACTION_BLUETOOTH_SETTINGS
API level 1から追加。
Bluetooth設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_BLUETOOTH_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/b24a11c2-2a4d-3e45-2589-4aa618a5097f.png" />

## ACTION_CAPTIONING_SETTINGS
API level 19から追加。
Kitkatから追加されたユーザ補助設定のうち、ビデオキャプション設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_CAPTIONING_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/5ee6a92f-971e-b22a-6d85-842bebfaa4e9.png" />

## ACTION_DATA_ROAMING_SETTINGS
API level 3から追加。
データローミング設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_DATA_ROAMING_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/ff98446f-1cd1-f888-dc5b-33f772724660.png" />


## ACTION_DATE_SETTINGS
API level 1から追加。
日付と時刻設定画面のアクション

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_DATE_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/fc5e019c-eedc-294b-f3be-541251698b65.png" />

## ACTION_DEVICE_INFO_SETTINGS
API level 8から追加。
端末の状態画面のアクション。
Android L Developer Previewではなぜかクラッシュする。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_DEVICE_INFO_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/95c3e697-fe4a-09ca-ef25-f40b2a809b0e.png" />

## ACTION_DISPLAY_SETTINGS
API level 1から追加。
ディスプレイ設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_DISPLAY_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/1def0ee2-50cc-1094-39f1-4cf941def0a2.png" />

## ACTION_DREAM_SETTINGS
API level 18から追加。
JELLY_BEAN_MR1で追加された[Daydream](http://developer.android.com/about/versions/android-4.2.html#Daydream)(スクリーンセーバー)設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_DREAM_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/74fd75c4-1c84-dbdf-eaf7-84f5ee7b5925.png" />

## ACTION_INPUT_METHOD_SETTINGS
API level 3から追加。
言語と入力設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_INPUT_METHOD_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/5bd737e5-0b3a-8c56-e0c8-155216a71ae8.png" />

## ACTION_INPUT_METHOD_SUBTYPE_SETTINGS
API level 11から追加。
インプットメソッド(文字入力アプリ)のサブタイプ設定画面のアクション。
`Settings.EXTRA_INPUT_METHOD_ID`に`InputMethodInfo#getId()`で取得したidを指定することでサブタイプを指定できるらしいが未検証。
Nexus5では、`Settings.EXTRA_INPUT_METHOD_ID`に何も設定しないとgoogleキーボードの入力言語設定が表示される。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/0381abf8-ccbf-3e5e-294e-42f50ace14d9.png" />

## ACTION_INTERNAL_STORAGE_SETTINGS
API level 3から追加。
内部ストレージ設定画面のアクション。
このアクションは端末ごとの差異が激しいかもしれない。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_INTERNAL_STORAGE_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/951de4b0-de8d-9a94-805d-cf185735d50d.png" />

## ACTION_LOCALE_SETTINGS
API level 1から追加。
端末の言語設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_LOCALE_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/83e1375b-ecdd-f1f3-7d83-711f6fc4e10e.png" />

## ACTION_LOCATION_SOURCE_SETTINGS
API level 1から追加。
位置情報アクセス設定画面のアクション。
位置情報の取得モードを切り替えさせるのに使うっぽい。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/a1423388-f7d2-f5bc-2476-88b4719d08b2.png" />

## ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
API level 9から追加。
すべてのアプリケーション情報画面のアクション。
アプリ設定画面の「すべて」タブのこと。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/3c7b0737-179b-f183-d69a-5b1241ddcc92.png" />

## ACTION_MANAGE_APPLICATIONS_SETTINGS
API level 3から追加。
アプリ管理画面のアクション。
`ACTION_APPLICATION_SETTINGS`と同じ画面が表示された。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/564d35c8-c99c-2a90-2eb8-a5252ecb51c3.png" />

## ACTION_MEMORY_CARD_SETTINGS
API level 3から追加。
外部ストレージ設定画面のアクション。
このアクションは端末ごとの差異が激しいかもしれない。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_MEMORY_CARD_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/b8e53c8f-f518-7be8-4a1f-1034a11828a4.png" />

## ACTION_NETWORK_OPERATOR_SETTINGS
API level 3から追加。
利用可能なネットワーク設定画面のアクション。
表示と同時に利用可能なネットワークの検索が始まる。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/8081b216-e755-146d-33fa-4aeddea57719.png" />

## ACTION_NFCSHARING_SETTINGS
API level 14から追加。
`ICE_CREAM_SANDWICH`から追加されたAndroidビーム設定画面のアクション。
Androidビームの有効/無効は`NfcAdapter#isNdefPushEnabled()`で確認できる。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_NFCSHARING_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/162e3c91-0677-0ec9-e710-056ffdbf6e58.png" />

## ACTION_NFC_PAYMENT_SETTINGS
API level 19から追加。
`KITKAT`から追加されたタップ&ペイ設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_NFC_PAYMENT_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/4bbff1c9-2fe7-07df-65d5-5b69e1d4c686.png" />

## ACTION_NFC_SETTINGS
API level 16から追加。
NFC設定画面のアクション。
Nexusなどでは無線とネットワーク画面内のチェックボックス。
NFCが追加されたのはAPI level 14からだが、この定数はAPI level 16からなので注意。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_NFC_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/d3fa32f4-9af4-02ce-9e2f-5427f1eb9123.png" />

## ACTION_PRINT_SETTINGS
API level 19から追加。
`KITKAT`で追加された印刷サービス設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_PRINT_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/90556995-376b-ece8-fcc0-f0b8df893ac4.png" />

## ACTION_PRIVACY_SETTINGS
API level 5から追加。
プライバシー設定画面のアクション。
Nexusではバックアップとリセット画面が相当。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_PRIVACY_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/cb9676c6-3470-3c6f-8d73-a36c0f7af005.png" />

## ACTION_QUICK_LAUNCH_SETTINGS
API level 3から追加。
Searchキーと他キーの同時押しで起動するアプリ設定画面のアクション。
この機能自体を知らなかった。ハードウェアキーボードが存在する端末向きだろうか？
Android L Developer Previewではクラッシュする。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_QUICK_LAUNCH_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/0dbef7d0-e1c7-9196-7b4c-9eab8c15742d.png" />

## ACTION_SEARCH_SETTINGS
API level 8から追加。
検索設定画面のアクション。
NexusではGoogle検索アプリの設定画面が表示される。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_SEARCH_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/52de7d84-7bc6-24b4-8b14-f2a28a81f9fc.png" />

## ACTION_SECURITY_SETTINGS
API level 1から追加。
端末のセキュリティ設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_SECURITY_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/bf5be132-fa7c-abc2-0e11-b8df853079a9.png" />

## ACTION_SETTINGS
API level 1から追加。
設定アプリのアクション(設定アプリの起動)。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/ec6804e6-9f18-df4d-1f1e-b1e3fc944439.png" />

## ACTION_SOUND_SETTINGS
API level 1から追加。
端末の音関連設定のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_SOUND_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/9d51e2a1-782f-4949-30a9-4e3cd9dfd44d.png" />

## ACTION_SYNC_SETTINGS
API level 3から追加。
アカウントの同期設定のアクション。
`Settings.EXTRA_AUTHORITIES`で`SyncAdapter`の`authorities`を指定することで直接その同期設定が開けるようだが未検証。
`Settings.EXTRA_AUTHORITIES`未設定の場合は設定済み同期一覧が表示される。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_SYNC_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/8025152d-3db1-9d92-5f43-7d24d3edb124.png" />

## ACTION_USER_DICTIONARY_SETTINGS
API level 3から追加。
ユーザー辞書設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_USER_DICTIONARY_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/e3d9d41f-c2f7-e90e-503b-cf95f3def50a.png" />

## ACTION_WIFI_IP_SETTINGS
API level 3から追加。
Wi-Fi接続時のIP設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_WIFI_IP_SETTINGS);
    startActivity(intent);
```
<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/f9f910d4-31bd-3526-b988-81791a528150.png" />

## ACTION_WIFI_SETTINGS
API level 1から追加。
Wi-Fi設定画面のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_WIFI_SETTINGS);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/64f6342d-bf1f-65cc-9de2-6237771a12a0.png" />

## ACTION_WIRELESS_SETTING
API level 1から追加。
無線とネットワーク設定のアクション。

```java
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_WIRELESS_SETTING);
    startActivity(intent);
```

<img width="360" src="https://qiita-image-store.s3.amazonaws.com/0/48019/a3122969-4044-dadf-481d-13dff95f9b34.png" />