【问题标题】:SharedActivity.getIntent beyond OnCreateSharedActivity.getIntent 超越 OnCreate
【发布时间】:2015-05-12 20:11:36
【问题描述】:

我正在开发一个 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 过程中注释所有内容,结果相同 - 黑屏。

然后我意识到,当另一个应用发送意图时,应用启动了两次,两个实例都冻结了,见图。

我还尝试按照 ci_ post 中的建议将单顶添加到启动模式 - 没有成功。

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

谢谢

【问题讨论】:

  • 给我们一个和平的代码来查看您的电话
  • 我在这里问过类似的问题stackoverflow.com/questions/28969169/… 不确定它是否足够接近复制。
  • @ci_ 如何实现 OnNewIntent() ?

标签: android delphi firemonkey


【解决方案1】:

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

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

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

  • 在 Java 代码(.java 文件)中继承标准 FireMonkey 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 代码。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2013-03-04
    • 2021-01-23
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多