gpt4 book ai didi

java - Android NDK,如何将Context传递给 native 代码?使用什么类型?

转载 作者:行者123 更新时间:2023-12-01 18:31:41 26 4
gpt4 key购买 nike

我是 JNI 的新手。在我的 android 项目中,我有一个声明 native 函数的 java 类:

public class MyService extends Service {


public int onStartCommand(Intent intent, int flags, int startId){

doIt(getApplicationContext(), "test");
}


public native boolean doIt(Context context, String name);

static
{
System.loadLibrary("myNativelib");
}

}

正如你在上面看到的,我希望 native 函数有两个参数,一个是 Context Android 应用程序的一个是 String .

在JNI native 代码中,我知道对于java String ,我应该使用类型 jString ,但是如何将上下文传递给我的 native 代码呢?

我需要Context输入我的 native 代码,因为我的 native 代码稍后会使用context调用java代码作为参数。

最佳答案

它只是一个 Java 对象,因此 jobject 可以正常工作。您需要查找类和方法才能使用它。

像这样的事情应该可以解决问题:

JNIEXPORT void JNICALL Java_org_yourclass_yourNativeMethod(JNIEnv *env, jclass cls, jobject obj) {
jclass Context_class = (*env)->FindClass(env, "android/content/Context");
jmethodID Check_id = (*env)->GetMethodID(env, Context_class, "checkCallingOrSelfPermission", "(Ljava/lang/String;)V");

jint i = (*env)->CallIntMethod(env, obj, Check_id, (*env)->NewStringUTF("android.permission.WRITE_EXTERNAL_STORAGE"));
}

关于java - Android NDK,如何将Context传递给 native 代码?使用什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com