如何使用Delphi 10 Seattle的Android应用程序接收Intent。

我以前编写的 “ 使用Firephionek Android应用程序接收Delphi XE8的Intent ”中没有处理Activity.OnNewIntent的问题。

发送字符串到另一个应用程序

创建一个新的多设备应用程序并将TButton和TMemo放置在窗体上。

intent01

按下按钮后,输入的字符串将发送到另一个应用程序。

描述按下Button1时的事件。

创建一个JIntent并设置要发送的数据。

Intent := TJIntent.Create;

Intent.setType(StringToJString('text/plain'));

Intent.setAction(TJIntent.JavaClass.ACTION_SEND);

Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AText));

使用Android API PackageManager类的queryIntentActivities方法,确认是否存在可以处理该意图的应用程序。

如果有可以处理的应用程序,请发送意图。

if MainActivity.getPackageManager.queryIntentActivities(Intent,

TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then

MainActivity.startActivity(Intent)

else

ShowMessage('Receiver not found');

源代码如下所示:

uses

Androidapi.JNI.GraphicsContentViewText, // JIntent

Androidapi.Helpers, // StringToJString

FMX.Platform.Android; // MainActivity

procedure TForm1.Button1Click(Sender: TObject);

var

AText: string;

Intent: JIntent;

begin

AText := Memo1.Text;

Intent := TJIntent.Create;

Intent.setType(StringToJString('text/plain'));

Intent.setAction(TJIntent.JavaClass.ACTION_SEND);

Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AText));

if MainActivity.getPackageManager.queryIntentActivities(Intent,

TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then

MainActivity.startActivity(Intent)

else

ShowMessage('Receiver not found');

end;

intent02

intent03

接收发送的字符串

创建一个新的多设备应用程序并将TMemo放置在表单上。

intent04

编辑AndroidManifest.template.xml

生成应用程序时,将生成“ AndroidManifest.template.xml”。

使用文本编辑器打开“ AndroidManifest.template.xml”,然后添加以下行。

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

//↓追加

<intent-filter>

<action android:name="android.intent.action.SEND" />

<category android:name="android.intent.category.DEFAULT" />

<data android:mimeType="text/plain" />

</intent-filter>

现在您可以收到意向书。

接收字符串

从意图接收字符串。

描述表单的OnCreate事件。

设置应用程序的事件处理程序(HandleAppEvent)以在应用程序变为活动状态时获取事件。

procedure TForm2.FormCreate(Sender: TObject);

var

AppEventService: IFMXApplicationEventService;

begin

if TPlatformServices.Current.SupportsPlatformService

(IFMXApplicationEventService, AppEventService) then

AppEventService.SetApplicationEventHandler(HandleAppEvent);

end;

将HandleAppEvent方法添加到窗体。

type

TForm2 = class(TForm)

private

function HandleAppEvent(AAppEvent: TApplicationEvent;

AContext: TObject): Boolean;

当应用程序处于活动状态时,如果有意图,请调用HandleIntentAction方法。

function TForm2.HandleAppEvent(AAppEvent: TApplicationEvent;

AContext: TObject): Boolean;

var

StartupIntent: JIntent;

begin

Result := False;

if AAppEvent = TApplicationEvent.BecameActive then

begin

StartupIntent := MainActivity.getIntent;

if StartupIntent <> nil then

HandleIntentAction(StartupIntent);

end;

end;

将HandleIntentAction方法添加到窗体。

type

TForm2 = class(TForm)

private

function HandleIntentAction(const Data: JIntent): Boolean;

检索从意图发送的字符串。

function TForm2.HandleIntentAction(const Data: JIntent): Boolean;

var

Extras: JBundle;

begin

Result := False;

if Data <> nil then

begin

Memo1.ClearContent;

Extras := Data.getExtras;

if Extras <> nil then

Memo1.Text := JStringToString

(Extras.getString(TJIntent.JavaClass.EXTRA_TEXT));

Invalidate;

end;

end;

当应用程序处于关闭状态时,它可以正常工作,但是在应用程序等待时,无法接收意图。

当正在等待的应用程序收到意图时,将调用活动的OnNewIntent。  

允许在调用OnNewIntent时处理意图。

将以下代码添加到窗体的OnCreate事件。

在MainActivity的registerIntentAction方法中接收TJIntent.JavaClass.ACTION_SEND。

结果,当调用Activity的OnNewIntent时,如果有TJIntent.JavaClass.ACTION_SEND的意图,则会有一个通知。

使用HandleActivityMessage方法接收通知。

procedure TForm2.FormCreate(Sender: TObject);

var

AppEventService: IFMXApplicationEventService;

begin

if TPlatformServices.Current.SupportsPlatformService

(IFMXApplicationEventService, AppEventService) then

AppEventService.SetApplicationEventHandler(HandleAppEvent);

//次のコードを追加

MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_SEND);

TMessageManager.DefaultManager.SubscribeToMessage

(TMessageReceivedNotification, HandleActivityMessage);

end;

将HandleActivityMessage方法添加到窗体。

type

TForm2 = class(TForm)

private

procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);

如果在此处调用HandleIntentAction方法,则在应用程序处于活动状态时,它将被HandleAppEvent方法覆盖。

因此,当您收到该意图时,请更新MainActivity意图。

*这里的处理没有得到充分验证。可能有问题。

procedure TForm2.HandleActivityMessage(const Sender: TObject;

const M: TMessage);

var

Intent: JIntent;

begin

if M is TMessageReceivedNotification then

begin

Intent := TMessageReceivedNotification(M).Value;

if Intent <> nil then

MainActivity.setIntent(Intent);

end;

end;

如何使用Delphi 10 Seattle的Android应用做Intent的发送和接收相关推荐

  1. Delphi 10 Seattle小票打印控件TQ_Printer

    TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...

  2. Delphi 10.4.2 Android 64位发布格式之App Bundle格式aab

    目录 Delphi 10.4.2 Android 64位发布格式之App Bundle格式aab 1.Android 64位新规则 2.D10.4.2的Android 64位发布结果 Delphi 1 ...

  3. delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题

    IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪). 虽然安装后,网上几乎是铺天盖地的吐 ...

  4. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  5. Android再进阶之广播发送、接收和注册过程

    广播的注册分为静态注册和动态注册,静态注册在应用安装的时候由PackageManagerService来完成注册.这里只介绍动态注册. 动态注册 调用registerReceiver方法,它在Cont ...

  6. Delphi 10.3 Web应用开发B/S框架介绍(一):uniGUI

    导言:很多人想当然的认为Delphi不能开发B/S WEB应用,其实Delphi发展到现在10.3,一直在不断的进步,Delphi不但巩固了Windows本机软件开发领域的王者地位,更扩展到了安卓.I ...

  7. Delphi 10.4.2 轻松实现Android/IOS txt小说电子书阅读器应用APP翻页效果

    Delphi 10.4.2是最新版本的跨平台本机应用开发工具,一套代码可编译到五个操作系统上:iOS.Android.Windows.macOS 和 Linux: 本代码仅仅数十行即可轻松实现Andr ...

  8. android控件复制,修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式

    Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...

  9. RAD Studio Delphi 10.4在Windows,Android,iOS,macOS和Linux上更快地可视化开发APP应用软件及新增功能详解

    RAD Studio 10.4的新增功能 RAD Studio 10.4提供了显着增强的高性能本机Windows支持,通过出色的快速代码完成功能提高了生产率,通过托管记录提高了代码速度,并在现代多核C ...

最新文章

  1. PHP魔术函数与魔术常量
  2. 160个Crackme011
  3. 对存储还搞不清楚,先看看这篇文章-从51单片机上去理解存储器
  4. jitter 如何优化网络_抖音优化该怎么做?
  5. hive分区用2个字段有何限制_[特性]Hive动态分区功能使用
  6. OJ1061: 顺序输出各位数字(C语言)(谈程序优化问题及pow函数耗时问题)
  7. SpringCloud实现一个模块调用另一个模块的服务
  8. connection url mysql,JDBC 连接MySQL实例详解
  9. python--面向对象
  10. 9-12 原生安装4
  11. 计算机网络 职中,职中计算机网络基础期中考试试卷.pdf
  12. python深度学习图像处理CSV文件分类标签图片到各个文件夹
  13. 央企:中国航天建设集团2022年毕业生招聘
  14. USB接口WiFi驱动浅析
  15. 阻抗测试仪软件,特性阻抗测试仪 阻抗测试仪 Tektronix 泰克 TDR DSA8300
  16. FMI飞马网 | 在人工智能时代,如何更好地发挥大数据的价值?
  17. 计算机如何磁盘整理,如何整理磁盘碎片让Win7电脑运行更快?
  18. jenkins自动打包报错:cannot find symbol
  19. 苹果超薄触摸显示技术专利曝光:重新定义轻薄
  20. unicode编码和utf-8编码的区别

热门文章

  1. 用C语言复现用贪吃蛇游戏(二)完结
  2. 免费收录网站搜索引擎登录入口大全
  3. android开发查漏补缺图
  4. GNSS测量与数据处理(2)
  5. linux克隆tf卡中的内容,TF/SD内存卡数据克隆怎样做图文详细教程
  6. NSIS Error的解决办法
  7. C++实现DES加密解密算法
  8. 传统分布式架构部署(apache+tomcat集群)
  9. 微信给好友定时自动发消息
  10. ios屏幕录制60帧_探索iOS屏幕帧缓冲区–内核反转实验