问题 Android:如何从本机代码广播意图?


是否可以从本机代码广播Intent?如果是,是否有与相关API相关的文档和/或示例代码?


10819
2017-11-02 17:38


起源



答案:


您需要通过调用Java API函数来调用它 - 没有用于意图的JNI接口。

首先查看课程 Intent,然后查找构建意图和广播它们的方法,然后调用它们。

编辑:这是一个 残缺 例。 jniEnv 被传递到你所有的JNI函数中。

jclass activityClass = jniEnv->FindClass("android/app/Activity");
jmethodID startAcitivtyMethod = jniEnv->GetMethodID(activityClass , "startActivity", "(Landroid/content/Intent;)V");
jniEnv->CallVoidMethod(yourActivityObject, startAcitivityMethod, yourIntentObject);

12
2017-11-02 17:43



非常好的解释。即使那不是完整的描述,你也应得+1。 - N-JOY
但是,如果我想从回调中调用(在另一个线程中),在这种情况下我无法获取jniEnv - Juude
对于非jni,有这样的解决方案吗? - RocketRandom


答案:


您需要通过调用Java API函数来调用它 - 没有用于意图的JNI接口。

首先查看课程 Intent,然后查找构建意图和广播它们的方法,然后调用它们。

编辑:这是一个 残缺 例。 jniEnv 被传递到你所有的JNI函数中。

jclass activityClass = jniEnv->FindClass("android/app/Activity");
jmethodID startAcitivtyMethod = jniEnv->GetMethodID(activityClass , "startActivity", "(Landroid/content/Intent;)V");
jniEnv->CallVoidMethod(yourActivityObject, startAcitivityMethod, yourIntentObject);

12
2017-11-02 17:43



非常好的解释。即使那不是完整的描述,你也应得+1。 - N-JOY
但是,如果我想从回调中调用(在另一个线程中),在这种情况下我无法获取jniEnv - Juude
对于非jni,有这样的解决方案吗? - RocketRandom


我认为从本机代码广播消息并不复杂,但只有在从Android Java应用程序调用本机函数的情况下才能传递Context。据我所知,纯粹的原生应用程序没有Context这样的东西,因此你不能广播一个意图。


0
2018-01-14 07:14





即使是纯本机应用程序也可以广播Intent。这意味着,即使本机活动是发射器,我们仍然可以广播Intents。


0
2017-12-09 05:13