我正在编写一个包含本机 C++ 库的 Xamarin Android 应用程序。
该本地库包含一个应该通过资产管理器加载图像的函数。
C++
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
void showImage(JNIEnv* env)
{
jclass clsAct = jniEnv->FindClass("android/app/Activity");
//... missing code to get activity
AAssetManager* assetManager = activity->assetManager;
AAsset* assetFile = AAssetManager_open(assetManager, "image.txt", AASSET_MODE_BUFFER);
//load image
}
这就是我得到的。不知何故,我需要获取活动才能访问资产管理器以加载资产。调用 showImage 可以正常工作,也是clsAct
在调用 FindClass 之后设置的,所以我猜这没什么问题。
C#
[DllImport("libAndroid", EntryPoint = "showImage")]
private static extern void ShowImage(IntPtr jniEnv);
//...
ShowImage(JNIEnv.Handle);
//...
如何通过 JNIEnv 访问 C++ 端的当前活动?