Android のアプリ情報を開く で ACTION_APPLICATION_DETAILS_SETTINGS インテントアクションを使って、アプリ情報の設定画面を開くコードを書きました
他にも Android のインテントアクションはありますので、開く画面のスクリーンショットと、Delphi のコードと合わせて紹介します
Android のインテントアクションと開く画面 - その 1
Android のインテントアクションと開く画面 - その 2
Android のインテントアクションと開く画面 - その 3
Android のインテントアクションと開く画面 - その 4
Android Developer のドキュメント
詳しい情報は
https://developer.android.com/reference/android/provider/Settings.html
にあります
ACTION_PRINT_SETTINGS
印刷設定画面
// 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);
ACTION_PRIVACY_SETTINGS
バックアップとリセット設定画面
// 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);
ACTION_QUICK_LAUNCH_SETTINGS
クイック起動設定画面
外部接続キーボードと組み合わせて使用するもの(SEARCH キーと同時押しで動作する)
Android 端末単独だとクラッシュする:画面参照
// 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);
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
電池の最適化を無視するかどうかの設定画面
使用しているデバイスの OSバージョンに注意! 6.0 以降ではないと使用できません。
また、この機能を使う場合は、AndroidManifest.xml に REQUEST_IGNORE_BATTERY_OPTIMIZATIONS の設定が必要です。
自動的に生成される AndroidManifest.xml を別のところにコピーして、
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
の記述を追加します。
以下は追加した AndroidManifest.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 を置いて、配置の設定で入れ替えます。
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);
ACTION_SEARCH_SETTINGS
検索設定画面
// 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);
ACTION_SECURITY_SETTINGS
セキュリティ設定画面
// 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);
ACTION_SETTINGS
設定画面
// 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);
ACTION_SHOW_REGULATORY_INFO
規制情報の表示
使用しているデバイスの OSバージョンに注意! 5.0 以降ではないと使用できません。
// 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);
ACTION_SOUND_SETTINGS
音と通知設定画面
// 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);
ACTION_SYNC_SETTINGS
アカウントの同期設定画面
// 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);
その 6 に続く...