Delphi 10 SeattleのAndroidアプリケーションでホーム画面にショートカットを作成するには

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;

このコードを実行すると、ホーム画面にショートカットが作成されました。

INSTALL_SHORTCUT

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください