OnCreate之外的SharedActivity.getIntent

时间:2015-05-12 20:11:37

标签: android delphi firemonkey

我正在开发一个Android项目,该项目应该通过共享活动从另一个应用程序中获取字符串。

如果应用程序未处于活动状态,我可以从OnCreate或单击按钮获取getIntent信息。但是当应用程序已经启动并且在后台运行时,如果另一个应用程序发送了另一个意图,我会获得与OnCreate相同的意图,而不是新的意图。

由于


  Var
  Intent: JIntent;
  S: String;
begin

  Try

    Intent := SharedActivity.getIntent;


    if Intent  Nil Then
    Begin

      if TJIntent.JavaClass.ACTION_SEND.equals(intent.getAction) Then
      Begin

        S := JStringToString(intent.getStringExtra(TJIntent.JavaClass.EXTRA_TEXT));

      End;

    End;

  Except
    On E: Exception Do
    ShowMessage(E.Message);
  End;

雷米,

感谢您的回复。

我尝试了一切(我认为)并且无法使其发挥作用。这就是我所做的:

我按照Brian的说明,在没有NFC调用的情况下构建了一个新的.Jar文件,并且在启动时失败了,这是来自DDMS的日志:

  

05-13 11:46:49.101:E / AndroidRuntime(16597):   java.lang.RuntimeException:无法实例化活动   ComponentInfo {com.blong.IntentTest / com.blong.nfc.NativeActivitySubclass}:   java.lang.ClassNotFoundException:没找到类   路径上的“com.blong.nfc.NativeActivitySubclass”:DexPathList [[zip文件]   “/data/app/com.blong.IntentTest-1/base.apk"],nativeLibraryDirectories=[/data/app/com.blong.IntentTest-1/lib/arm,   / vendor / lib,/ system / lib]]

所以我从包含NFC的原始.Java文件中重新绑定了.Jar文件,但它也没有用。当应用程序处于后台并从新意图启动时,应用程序显示黑屏并在其出现时立即冻结,最后一件事是在onNewIntent过程中对所有内容进行注释,结果是相同的 - 黑屏。 / p>

然后我意识到应用程序在另一个应用程序发送意图时启动了两次,并且两个实例都冻结了,请参阅图片。

enter image description here

我还尝试按照ci_ post中的建议将singletop添加到launchmode中 - 没有成功。

我怎样才能让这么简单的事情发挥作用?

由于

1 个答案:

答案 0 :(得分:1)

Activity.getIntent()返回启动调用进程的Intent。如果进程在已经运行时收到新的Intent,则不会更新。 Android有一个onNewIntent事件用于此目的,但不幸的是FireMonkey不公开该事件。但是,有一种解决方法,如以下博客中所述:

Using NFC in Delphi XE7 Android apps | Receiving new intents at runtime

  

回应新意图所需的步骤如下:

     
      
  • 继承Java代码中的标准FireMonkey Java本机活动类(.java文件),实现一个调用本机方法的onNewIntent()方法,我们将在Delphi中实现   
  • 使用javac.exe将Java代码编译为已编译的Java类文件(.class文件),引用Embarcadero编译的Java活动类
  •   
  • 使用jar.exe
  • 将Java类文件添加到Java存档(.jar文件)   
  • 将.jar文件添加到Delphi项目中
  •   Delphi代码中的
  • 声明了一个将由Java代码
  • 调用的本机JNI方法   
  • 编排从Java UI线程到FireMonkey线程的线程切换,沿途将任何JNI参数对象变形为Java Bridge包装器对象
  •   

博客详细介绍了每个步骤,显示了Java和Delphi代码必须实现它。