Delphiでお手軽プログラミング

Delphiでお手軽プログラミングメニュー

Androidのホーム画面にショートカットを作成する(Android8.0以降)

DelphiでAndroidのホーム画面にショートカットを作成する(Android8.0 Oreo API Level 26 以降)


Delphiを起動して新規作成を行う

Delphiを起動し、ファイル→新規作成→マルチデバイスアプリケーションをクリックし、空のアプリケーションを選択してOKボタンを押してプロジェクトを作成します。
TButtonを1つ配置します。

ソースコードを記述する

以下のソースコードを記述します。
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses
     Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText
     ,Androidapi.JNI.JavaTypes, Androidapi.JNI.OS, Androidapi.JNIBridge, FMX.Platform.Android;

procedure TForm1.Button1Click(Sender: TObject);
var
    SCIntent:JIntent;
    wIconIdentifier : integer;
    wIconResource : JIntent_ShortcutIconResource;
    sm:JShortcutManager;
    sib:JShortcutInfo_Builder;
    info:JShortcutInfo;
    ico:JIcon;
begin
  //本アプリケーションを起動するIntent
  SCIntent := TJIntent.JavaClass.init(
    TAndroidHelper.Context.getApplicationContext,
    MainActivity.getClass);
  SCIntent.setAction(TJIntent.JavaClass.ACTION_MAIN);

  //アイコンのリソースIDを取得
  wIconIdentifier :=
    TAndroidHelper.Activity.getResources.getIdentifier(
      StringToJString('ic_launcher'), //リソース名
      StringToJString('drawable'),
      TAndroidHelper.Context.getApplicationContext.getPackageName
    );
  wIconResource :=TJIntent_ShortcutIconResource.JavaClass.fromContext(
      TAndroidHelper.Context, wIconIdentifier
  );

  ico:=TJIcon.JavaClass.createWithResource(
    TAndroidHelper.Context.getPackageName, wIconIdentifier
  );

  sib:=TJShortcutInfo_Builder.JavaClass.init(
    TAndroidHelper.Context.getApplicationContext,
    TJIntent.JavaClass.ACTION_MAIN
  );

  sib.setShortLabel(StrToJCharSequence('ショートカット名'));
  sib.setLongLabel(StrToJCharSequence('ショートカット名'));
  sib.setDisabledMessage(StrToJCharSequence('使えない時名'));
  sib.setIcon(ico);
  sib.setIntent(SCIntent);
  info:=sib.build();

  sm:=TJShortcutManager.Wrap(
    TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.SHORTCUT_SERVICE)
  );

  //ホーム画面にショートカットを作成する
  sm.requestPinShortcut(info,nil);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if Key = vkHardwareBack then Key := 0;
end;

end.

実行する




Copyright 2019 Mam