【Delphi】Android 桌面图标添加快捷菜单功能

目录

一、为什么需要桌面图标长按快捷菜单

二、实现Android桌面图标快捷菜单

        第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr

         第二步:编辑项目中的 AndroidManifest.template.xml 文件

        第三步:创建shortcuts.xml文件

        第四步:创建 strings.xml 文件

        第五步:创建菜单图标文件 shortcut.png

         第六步:配置Deployment

        第七步:实现获知用户按下【快捷菜单A】


首先,看下Android桌面图标快捷菜单的例子,在桌面上长按微信和支付宝APP图标。会出现快捷菜单,微信有三个,支付宝有4个快捷菜单。参考文档(Andrea's Blog)

【Delphi】Android 桌面图标添加快捷菜单功能_第1张图片【Delphi】Android 桌面图标添加快捷菜单功能_第2张图片

自从Android 7.1 开始就支持桌面图标长按快捷菜单功能,Delphi从10.3 Rio版本开始支持,当前Android的最新版本是12,Delphi的版本是11.1了。关于Android 桌面图标快捷菜单官方资料可参考:this location of the Android’s official documentation.

一、为什么需要桌面图标长按快捷菜单

如果我们的App提供有很多功能,例如可能有好几个Form或者Frame,如果没有桌面快捷菜单,用户操作首先必须进入主界面,然后才能根据主界面的引导(菜单或者Tab)进入不同的功能界面,但是有了桌面快捷菜单后,我们就可以很方便的,很友好的让用户直接进入到程序的某个功能。例如微信的“扫一扫”和支付宝的“扫一扫”,这样是不是感觉界面更方便。关于Android的桌面图标快捷菜单功能,按照Andrea的说法,IOS从2015年的IOS9也已经支持桌面快捷菜单。

关于桌面快捷菜单,按照官方资料是支持静态和动态菜单的,本文只涉及静态菜单,动态菜单请参见Android官方资料。接下来我们通过一个例子一步一步实现Android 桌面图标快捷菜单。

首先看下我们已经是实现的效果:

​​​​​​​

 

二、实现Android桌面图标快捷菜单

        第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr

主Form上放置一个TabControl1,然后设置两个TabItem,分别是:TabItem_Main、TabItem_ShortCut。上面分别放置显示不同信息的label。选择 Android 32编译平台,在主Form中引用如下单元:

  Androidapi.JNI.App,
  Androidapi.JNI.JavaTypes,
  Androidapi.Helpers,

【Delphi】Android 桌面图标添加快捷菜单功能_第3张图片【Delphi】Android 桌面图标添加快捷菜单功能_第4张图片【Delphi】Android 桌面图标添加快捷菜单功能_第5张图片

         第二步:编辑项目中的 AndroidManifest.template.xml 文件

通过Delphi IDE 编辑AndroidManifest.template.xml文件,这个文件位于项目工程文件目录下,需要先编译下,否则可能还没有生成这个文件。在activity 标记中增加一行,就在intent-filter 元素的关闭符号后增加()。

            ...
            
            
            
        
<%activity%>

 程序启动的时候会检查AndroidManifest.template.xml这个文件,如果发现有android.app.shortcuts项,则会根据这个项目的信息加载APP桌面图标快捷菜单。

下面就介绍在android.app.shortcuts项中引用的XML文件(shortcuts.xml)。

        第三步:创建shortcuts.xml文件

在项目根目录位置处,也就是AndroidManifest.template.xml这个文件所在的目录创建shortcuts.xml文件。



  
    
    
    

说明:

  1. 需要提供一个shortcutId值,这是一个字符串,本例中是"myshortcut1",不需要双引号。
  2. 需要提供一个shortcutShortLabel值,这个也是一个字符串,实际上就是我们显示快捷菜单的名字,一般长度不要超过10个字符。它是通过一个资源文件引用的,下面会介绍。
  3. 需要保证enabled="true",否则会不显示菜单,如果为false时,就会显示shortcutDisabledMessage。
  4. 可以给菜单提供一个图标(128x128),这个就是icon,本例中为:shortcut.png
  5. 设置 intent参数,非常重要的参数是tagetPackage,这个必须和我们当前程序的包名一致。本例为com.embarcadero.ShortCut_Demo。另外一个参数action是一个字符串,当快捷菜单激活(按下)时,系统通过这个参数告知是那个菜单按下了。

        第四步:创建 strings.xml 文件

这个文件放哪里都是可以的,但是为了方便,建议放在项目根目录下,和AndroidManifest.template.xml文件在一个目录中。这个文件是一个资源文件,也是需要被引用的。



    快捷菜单A
    Shortcut is disabled  

【Delphi】Android 桌面图标添加快捷菜单功能_第6张图片    

        第五步:创建菜单图标文件 shortcut.png

使用任何图标工具,创建一个快捷菜单的图标ICON。我们使用128 X 128 像素的png文件。对于图标文件,网上有很多资源,国内有名的阿里图标 icon font;国外有名的 icons8

【Delphi】Android 桌面图标添加快捷菜单功能_第7张图片

         第六步:配置Deployment

至此,我们已经创建好了两个XML文件(shortcuts.xml and strings.xml)和一个图标文件(shortcut.png)。我们需要让最终构建过程正确的引用这几个文件(最终的APK)。需要在Delphi 的 IDE 中,打开Project -> Deployment菜单,按照如下格式增加以上几个文件。

【Delphi】Android 桌面图标添加快捷菜单功能_第8张图片

需要注意的是,上图只是配置了Debug configuration。如果需要所有的编译都增加这几个资源,请选择All configration。

说明如下:

  1. shortcuts.xml 的“Remote Path”,请输入:res\xml\
  2. strings.xml 的“Remote Path”,请输入:res\values\
  3. shortcut.png 的“Remote Path”,请输入: res\drawable\

恭喜!至此,我们的APP已经可以实现桌面长按快捷菜单了!!

【Delphi】Android 桌面图标添加快捷菜单功能_第9张图片

 完了吗?还没有,因为我们还没有实现如何知道用户按下的是【快捷菜单A】呢?

        第七步:实现获知用户按下【快捷菜单A】

程序如果希望获知用户是通过长按桌面图标快捷菜单启动的程序,还是直接单击桌面图标启动的程序?可以通过action属性来获知。对于本例就是shortcuts.xml中定义的action属性值:android.intent.action.MYACTION1,通过在程序启动的时候判断action值就可以确定程序启动的入口到底是什么? 简单的在主窗体创建的时候判断下代码:

procedure TForm1.FormCreate(Sender: TObject);
var
  action : string;
begin
  action := JStringToString(TAndroidHelper.Activity.getIntent.getAction);
  if action = 'android.intent.action.MYACTION1' then  //说明是快捷菜单
     TabControl1.ActiveTab := TabItem_ShortCut
  else
     TabControl1.ActiveTab := TabItem_Main;   //进入主界面
  Label_action.Text := action;
end;

如果用户直接进入程序,则界面tab活动的是【主界面进入显示】;如果用户是通过桌面图标长按快捷菜单【快捷菜单A】进入的,则界面tab活动的是【SHORTCUT进入界面】。

源程序下载:源程序(在Delphi 11.1下编译,如果是其他的Delphi版本,需要重新创建工程,因为AndroidManifest.template.xml文件可能因为版本不同而不同,从而导致不同版本直接使用是编译不通过的

你可能感兴趣的:(Delphi,Android,delphi,android,长按,shortcut,桌面图标,快捷菜单)