我想为Android编写一个应用程序,它使用框架缓冲区在屏幕上显示内容。这将只在特定的根设备上运行,因此权限等不是问题。同样的应用程序(反正是简单的测试版本)已经在PC/Linux上正常运行了。
问题如下:
我想把我的应用程序作为一个常规的Android应用程序(带有一些本机代码)启动,它只是没有可见的UI,除了框架缓冲区绘图,它占据了整个屏幕。如果仍然能够从操作系统中获得事件,那就太好了。
另见:drivers.html
发布于 2014-02-18 04:39:18
嗨,亚历克斯不知道为什么/如何阻止android操作系统写到框架缓冲区。只要您的android应用程序是可见的,并且在顶部,您就可以将控件作为您想要显示的内容。
您的应用程序应该有一个带有SurfaceView的活动(您可能希望应用程序隐藏通知栏,在活动的创建中调用此函数) requestWindowFeature(Window.FEATURE_NO_TITLE);
)
您的活动应该有SurfaceHolder.Callback实现来处理回调,就像图面准备好填充框架缓冲区一样。获取表面持卡器对象为SurfaceView.getHolder(),以便设置视图的像素格式等。
一旦调用了"surfaceCreated“回调,您就可以安全地将表面视图对象(传递宽度和高度可能也是一个好主意)传递给本机,以便使用"ANativeWindow”类填充它。
检查NDK示例代码以了解如何使用类NDK documentation
SurfaceHolder.Callback documentation
本质上,您需要这些(在JB /Kitkat上)
ANativeWindow_fromSurface
的表面视图相关联的本机窗口(ANativeWindow_fromSurface
)。ANativeWindow_acquire
获取一个锁。ANativeWindow_setBuffersGeometry
设置本地窗口的几何参数(窗口、宽度、高度、pf)ANativeWindow_lock
加载本地窗口ANativeWindow_unlockAndPost
呈现的更改的最后一步如果您需要示例代码,请阅读ndk示例示例。NDK documentation
https://stackoverflow.com/questions/21348715
复制相似问题