1

我正在编写一个包含本机 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++ 端的当前活动?

4

0 回答 0