LoginSignup
3
3

More than 5 years have passed since last update.

Android のインテントアクションと開く画面 - Level 26 対応編

Posted at

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);

Screenshot_20181218-154402.png

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);

Screenshot_20181219-172424.png

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);

Screenshot_20181219-143929.png

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);

Screenshot_20181219-144432.png

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);

Screenshot_20181217-165913.png

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);

Screenshot_20181217-174917.png

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);

Screenshot_20181218-132135.png

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);

Screenshot_20181219-144238.png

以前書いた Android のインテントアクションと開く画面の記事

以前公開したインテントアクションと開く画面の紹介です
コードはすべて Delphi で記述しています

で Level 28とかどうよ?

API level 28 - ACTION_DATA_USAGE_SETTINGS
とかの Level 28 以降の定義は無かった...使う場合は自力で作らないと...

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3