【问题标题】:Sending intents from an Android-NDK application从 Android-NDK 应用程序发送意图
【发布时间】:2012-04-03 09:47:58
【问题描述】:

我正在android下用C++编写一个本地应用程序,我需要广播一些意图。这可能吗?

如果您要向我指出 JNI,请给我更多详细信息,因为我不确定这是如何完成的 :)


如果这是不可能的,我会做的是在 NDK 守护程序和 Java-Android-Service 之间建立一个命名管道。 NDK 守护进程将写入命名管道,然后 Java-Android-Service 将发出意图。

有没有更好的办法?

【问题讨论】:

    标签: android-intent android-ndk


    【解决方案1】:

    您可以运行一个 am 命令,将 Intent 发送到活动或服务。

    const char *cmd = "am startservice -a %s"
                      " --ei ars_flag 2 --ei invitationType %d"
                      " --ei mode 1 --es ars_gadget_uuid \"%s\""
                      " --ei ars_conn_handle %d"
                      " --es ars_user_uuid \"%s\" --es ars_username \"%s\"";
    sprintf (cmdbuffer, cmd, ...);
    system (cmdbuffer);
    

    【讨论】:

    • 添加 --user 0 也可能有帮助。例如。 am startservice --user 0 -a ...
    • @Tamas 非常感谢。我一直在与安全异常作斗争,这是正确的解决方法!
    【解决方案2】:

    您不能在本地发送 Intent,这是当前 NDK 的已知限制(可能会在未来实现)。

    所以你要做的就是在你想要广播一个 Intent 时使用 JNI 向上调用 Java(如果你需要知道这是如何完成的,谷歌 JNI 和向上调用),并拥有创建和发送的 Java 代码意图。因此,如果您通过 Java Activity 启动应用程序并通过 JNI 调用本机代码,只需在 Java 中实现另一个可以接收您的调用的方法。我不知道你对 JNI 了解多少,但维基百科的信息应该能让你很好地开始。

    【讨论】:

    • 我对JNI一无所知,除了理论。由于我的应用程序是纯 C++,我知道这要困难得多。我假设了一个创建 JVM 的完整示例,但这里的意图是乱序的......?
    • 我不知道当时是否可行,但目前完全可行。未来的搜索不应认为这个答案是完全正确的。
    • 所以现在是 2020 年,仍然不支持原生发送 Intent?注意:关于使用 JNI 的部分具有误导性,因为 Java 运行时不存在于本机应用程序中。
    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多