Android のインテントアクションと開く画面 - その 5

[Android のアプリ情報を開く](https://qiita.com/CYonezawa/items/75d37b9065b1e2a4ceb1) で ACTION_APPLICATION_DETAILS_SETTINGS インテントアクションを使って、アプリ情報の設定画面を開くコードを書きました
他にも Android のインテントアクションはありますので、開く画面のスクリーンショットと、Delphi のコードと合わせて紹介します

[Android のインテントアクションと開く画面 - その 1](https://qiita.com/CYonezawa/items/0a5bbdb2523e736bef3a)
[Android のインテントアクションと開く画面 - その 2](https://qiita.com/CYonezawa/items/2141c329dd1dacca1052)
[Android のインテントアクションと開く画面 - その 3](https://qiita.com/CYonezawa/items/d68a960d65080813693e)
[Android のインテントアクションと開く画面 - その 4](https://qiita.com/CYonezawa/items/7bd18ce521de1a5709de)

## Android Developer のドキュメント

詳しい情報は
https://developer.android.com/reference/android/provider/Settings.html
にあります

# ACTION_PRINT_SETTINGS

印刷設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_PRINT_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102759.png](https://qiita-image-store.s3.amazonaws.com/0/164551/0f2cc0d8-0115-fbea-c35c-5c5b64314efd.png)


# ACTION_PRIVACY_SETTINGS

バックアップとリセット設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_PRIVACY_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102804.png](https://qiita-image-store.s3.amazonaws.com/0/164551/72f991bf-7907-7c41-5061-2933212c84d8.png)


# ACTION_QUICK_LAUNCH_SETTINGS

クイック起動設定画面
外部接続キーボードと組み合わせて使用するもの（SEARCH キーと同時押しで動作する）
Android 端末単独だとクラッシュする：画面参照

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_QUICK_LAUNCH_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102835.png](https://qiita-image-store.s3.amazonaws.com/0/164551/fc67a920-1789-c6f6-e082-1dc67e822c98.png)


# ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

電池の最適化を無視するかどうかの設定画面
使用しているデバイスの OSバージョンに注意！ 6.0 以降ではないと使用できません。

また、この機能を使う場合は、AndroidManifest.xml に REQUEST_IGNORE_BATTERY_OPTIMIZATIONS の設定が必要です。
自動的に生成される AndroidManifest.xml を別のところにコピーして、

```xml
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
```

の記述を追加します。
以下は追加した AndroidManifest.xml の一例です。

```xml
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.embarcadero.IntentAction"
        android:versionCode="1"
        android:versionName="1.0.0"
        android:installLocation="auto">

    <!-- This is the platform API where NativeActivity was introduced. -->
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.DEVICE_POWER" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
    <application android:persistent="False" 
        android:restoreAnyVersion="False" 
        android:label="IntentAction" 
        android:debuggable="True" 
        android:largeHeap="False"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme"
        android:hardwareAccelerated="true">

		
        <!-- Our activity is a subclass of the built-in NativeActivity framework class.
             This will take care of integrating with our NDK code. -->
        <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="IntentAction"
                android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                android:launchMode="singleTask">
            <!-- Tell NativeActivity the name of our .so -->
            <meta-data android:name="android.app.lib_name"
                android:value="IntentAction" />
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter> 
        </activity>
        
        <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" />

    </application>
</manifest>
<!-- END_INCLUDE(manifest) -->

```

通常の位置に上書きすると、ビルド時にデフォルトに書き換えられてしまうので、書き換えられないところに AndroidManifest.xml を置いて、配置の設定で入れ替えます。

![AndroidDeploy.png](https://qiita-image-store.s3.amazonaws.com/0/164551/b034aa4f-e9e9-41a8-3a37-0c3bf031c352.png)

Delphi のコードはこちら

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText
//         Androidapi.JNI.Net, Androidapi.JNI.JavaTypes を追加します
// インテントは Intent: JIntent; で定義しています
// URIは uri: string; で定義しています

// uri にパッケージ名をセットします
// ここでは getPackageName を使って自分自身のパッケージ名を取得しています
uri := 'package:' + JStringToString(TAndroidHelper.Context.getPackageName);

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, StrToJURI(uri));

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102841.png](https://qiita-image-store.s3.amazonaws.com/0/164551/fe18b179-b6a2-f58f-04c8-0aa9a8757138.png)


# ACTION_SEARCH_SETTINGS

検索設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SEARCH_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102847.png](https://qiita-image-store.s3.amazonaws.com/0/164551/decf91d5-bbfd-c649-61e8-a45a18923b84.png)


# ACTION_SECURITY_SETTINGS

セキュリティ設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SECURITY_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102853.png](https://qiita-image-store.s3.amazonaws.com/0/164551/f263f5bd-4f2b-af35-b8b0-e13154a6c8f5.png)


# ACTION_SETTINGS

設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102859.png](https://qiita-image-store.s3.amazonaws.com/0/164551/f071b44c-3fc0-1624-d5fe-039327961bd6.png)


# ACTION_SHOW_REGULATORY_INFO

規制情報の表示
使用しているデバイスの OSバージョンに注意！ 5.0 以降ではないと使用できません。

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SHOW_REGULATORY_INFO);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102906.png](https://qiita-image-store.s3.amazonaws.com/0/164551/09feece5-3e97-8caf-8844-d9e67960361b.png)


# ACTION_SOUND_SETTINGS

音と通知設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SOUND_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102912.png](https://qiita-image-store.s3.amazonaws.com/0/164551/f29c3e3b-d96e-f90a-9ead-7c77e34a222b.png)


# ACTION_SYNC_SETTINGS

アカウントの同期設定画面

```delphi
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
//         Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています

// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_SYNC_SETTINGS);

// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
```

![Screenshot_20180206-102917.png](https://qiita-image-store.s3.amazonaws.com/0/164551/148b195a-2605-7a0c-e9f5-0c66418a2c29.png)


その 6 に続く...