如何解决ANativeWindow_fromSurface(env,surface) 总是返回 null
我正在尝试将表面从片段传递到我的本机代码。
但是当我使用 ANativeWindow_fromSurface(env,surface); 创建时,ANativeWindow 始终为空;
我使用的是 kotlin 而不是 Java。
我从片段的 onViewCreated() 函数调用本机函数:
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
surfaceView = view.findViewById(R.id.surfaceView)
surface = surfaceView.holder.surface
myClass = MyClass()
myClass.myFunction(surface)
}
我的班级:
class MyClass{
init {
System.loadLibrary("nativeLib")
}
external fun myFunction(surface: Surface): Int
}
这是我的 native.cpp :
extern "C"
JNIEXPORT jint JNICALL
Java_com_my_app_MyClass_myFunction(JNIEnv *env,jobject obj,jobject surface){
nativeWindow = ANativeWindow_fromSurface(env,surface);
if(nativeWindow == nullptr){
ALOG("nativeWindow is null");
return -1;
}
}
当我安装我的应用程序时,它显示 nativeWindow 为空。 为什么它是空的? 谁能建议我解决这个问题?
解决方法
终于找到解决方案了!!
我将 myClass.myFunction() 调用移动到 SurfaceHolder.Callback{} 。
现在看起来像这样:
override fun surfaceCreated(p0: SurfaceHolder) {
object : Thread(){
override fun run() {
myClass.myFunction(surface)
}
}.start()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。