我正在编写一个包含本机C ++库的Xamarin Android应用程序。
该本机库包含一个应该通过assetmanager加载图像的函数。
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工作正常,调用FindClass后也会设置clsAct
,所以我猜没有错。
C#
[DllImport("libAndroid", EntryPoint = "showImage")]
private static extern void ShowImage(IntPtr jniEnv);
//...
ShowImage(JNIEnv.Handle);
//...
如何通过JNIEnv访问C ++端的当前活动?