Delphi 10 SeattleのAndroidアプリケーションでホーム画面にショートカットを作成する方法を紹介します。
ホーム画面にショートカットを作成するには、次の権限が必要になります。
com.android.launcher.permission.INSTALL_SHORTCUT
プロジェクトオプションの画面ではこの権限を設定できないようなので、
「AndroidManifest.template.xml」を直接編集します。
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="%package%"
android:versionCode="%versionCode%"
android:versionName="%versionName%"
android:installLocation="%installLocation%">
<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
<%uses-permission%>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <=追加
<uses-feature android:glEsVersion="0x00020000" android:required="True"/>
ショートカットを作成するコードは次のようになります。
uses
Androidapi.Helpers, // SharedActivity
Androidapi.JNI.Os, // TJParcelable
Androidapi.JNI.App, // TAndroidHelper.GetJActivity
Androidapi.JNIBridge, // ILocalObject
Androidapi.JNI.GraphicsContentViewText, // JIntent
Androidapi.JNI.JavaTypes; // StringToJString
procedure TForm1.Button1Click(Sender: TObject);
const
AppName = 'com.embarcadero.Project1';
var
ShortcutIntent, Intent: JIntent;
wIconIdentifier: Integer;
wIconResource: JIntent_ShortcutIconResource;
begin
// アプリケーションを起動するためのIntent
ShortcutIntent := TJIntent.JavaClass.init(TAndroidHelper.Context,
TAndroidHelper.Context.getClass);
ShortcutIntent.setAction(TJIntent.JavaClass.ACTION_MAIN);
// ショートカット作成依頼のためのIntent
Intent := TJIntent.Create;
Intent.setAction
(StringToJString('com.android.launcher.action.INSTALL_SHORTCUT'));
// ショートカットのタップ時に起動するIntentを指定
Intent.putExtra(TJIntent.JavaClass.EXTRA_SHORTCUT_INTENT,
TJParcelable.Wrap((ShortcutIntent as ILocalObject).GetObjectID));
Intent.putExtra(TJIntent.JavaClass.EXTRA_SHORTCUT_NAME,
StringToJString(Application.Title));
wIconIdentifier := TAndroidHelper.Activity.getResources.getIdentifier
(StringToJString('ic_launcher'), StringToJString('drawable'),
StringToJString(AppName));
wIconResource := TJIntent_ShortcutIconResource.JavaClass.fromContext
(TAndroidHelper.Context, wIconIdentifier);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SHORTCUT_ICON_RESOURCE,
TJParcelable.Wrap((wIconResource as ILocalObject).GetObjectID));
// これをつけておかないと、すでにホームアイコンがあっても、また作成してしまう
Intent.putExtra(StringToJString('duplicate'), False);
TAndroidHelper.Context.sendBroadcast(Intent);
end;
このコードを実行すると、ホーム画面にショートカットが作成されました。