Delphi 10.3 Rio で Android API Level 26 に対応したので、以前できなかった Level 26 の Android Intent を使ってみました
記述言語は Delphi、使用端末は Nexus 5X (Android ver 8.1.0) です
Android Developer ドキュメント
Android Developer - Settings をご覧ください
ACTION_APP_NOTIFICATION_SETTINGS
API level 26
通知設定画面
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_APP_NOTIFICATION_SETTINGS);
Intent.putExtra(TJSettings.JavaClass.EXTRA_APP_PACKAGE, TAndroidHelper.Context.getPackageName);
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_CHANNEL_NOTIFICATION_SETTINGS
通知詳細設定画面
API level 26
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// Notification を使うので、フォーム上に TNotificationCenter コンポーネントを置いています
// チャンネルは Channel: TChannel; で定義しています
// 作業用として chennel_id, channel_title: string; を定義
// 作業用として channel_importance: TImportance; を定義
// 作業用の変数に値を代入
channel_id := 'SampleChannel';
channel_title := 'SampleTitle';
chennel_importance := TImportance.Default;
// Channel を生成して値をセットします
Channel := NotificationCenter1.CreateChannel;
Channel.ID := channel_id;
Chennel.Title := channel_title;
Channel.Importance := channel_importance;
// 値をセットした Channel で通知チャンネルを生成します
NotificationCenter1.CreateOrUpdateChannel(Channel);
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
Intent.putExtra(TJSettings.JavaClass.EXTRA_APP_PACKAGE, TAndroidHelper.Context.getPackageName);
Intent.putExtra(TJSettings.JavaClass.EXTRA_CHANNEL_ID, StringToJString(channel_id));
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_HARD_KEYBOARD_SETTINGS
物理キーボード設定画面
API level 24
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_HARD_KEYBOARD_SETTINGS);
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
アプリのデータ使用量設定画面
API level 24
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// URIは uri: string; で定義しています
// uri にパッケージ名をセットします
// ここでは getPackageName を使って自分自身のパッケージ名を取得しています
uri := 'package:' + JStringToString(TAndroidHelper.Context.getPackageName);
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS, StrToJURI(uri));
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_MANAGE_DEFAULT_APPS_SETTINGS
API level 24
デフォルトアプリ設定画面
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_DEFAULT_APPS_SETTINGS);
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_MANAGE_UNKNOWN_APP_SOURCES
API level 26
不明なアプリのインストール設定画面
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// URIは uri: string; で定義しています
// uri にパッケージ名をセットします
// ここでは getPackageName を使って自分自身のパッケージ名を取得しています
uri := 'package:' + JStringToString(TAndroidHelper.Context.getPackageName);
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_UNKNOWN_APP_SOURCES, StrToJURI(uri));
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_NIGHT_DISPLAY_SETTINGS
API level 26
夜間モード画面設定画面
が、
In some cases, a matching Activity may not exist, so ensure you safeguard against this.
とあるように、該当するアクティビティが無いことが多い
その場合は、exception が発生する(画面イメージ参照)
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_NIGHT_DISPLAY_SETTINGS);
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
ACTION_REQUEST_SET_AUTOFILL_SERVICE
自動入力サービス設定画面
API level 26
// uses に Androidapi.Helpers, Androidapi.JNI.APP, Androidapi.JNI.Provider
// Androidapi.JNI.GrapicsContentViewText を追加します
// インテントは Intent: JIntent; で定義しています
// URIは uri: string; で定義しています
// uri にパッケージ名をセットします
// ここでは getPackageName を使って自分自身のパッケージ名を取得しています
uri := 'package:' + JStringToString(TAndroidHelper.Context.getPackageName);
// 目的のインテントアクションのインテントを作成します
Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_REQUEST_SET_AUTOFILL_SERVICE, StrToJURI(uri));
// startActivity を使ってインテントを飛ばします。
TAndroidHelper.Activity.startActivity(Intent);
以前書いた Android のインテントアクションと開く画面の記事
以前公開したインテントアクションと開く画面の紹介です
コードはすべて Delphi で記述しています
- Android のインテントアクションと開く画面 - その 1
- Android のインテントアクションと開く画面 - その 2
- Android のインテントアクションと開く画面 - その 3
- Android のインテントアクションと開く画面 - その 4
- Android のインテントアクションと開く画面 - その 5
- Android のインテントアクションと開く画面 - その 6
で Level 28とかどうよ?
API level 28 - ACTION_DATA_USAGE_SETTINGS
とかの Level 28 以降の定義は無かった...使う場合は自力で作らないと...