我想编写一个用于使用Framebuffer在屏幕上显示内容的应用程序。这仅在特定的根系设备上运行,因此权限等不是问题。相同的应用程序(无论如何,简单的测试版本)已经在PC/Linux上运行。
问题:
-
如何避免Android OS访问Framebuffer?我希望在我的应用程序运行时,要让OS 从不触摸框架,没有写作,也没有ioctls。我需要采取什么措施才能获得flamebuffer的独家使用,然后(当我的应用程序退出时)将其还给OS?
-
Android Framebuffer和Linux Framebuffer之间是否有任何区别?
P.S。我想启动我的应用程序作为常规Android应用程序(带有一些本机代码),除了接管整个屏幕的Framebuffer绘制外,它没有可见的UI。仍然能够从操作系统中获得事件真是太好了。
另请参见:http://www.kandroid.org/online-pdk/guide/display_drivers.html
hi alex不确定为什么/如何阻止Android OS写入framebuffer。只要您的Android应用程序可见,并且最重要的是您要显示的内容。
您的应用程序应该具有带有Surfaceview的活动(您可能希望您的应用程序隐藏通知栏在您的活动中拨打此功能) requestWindowFeature(Window.FEATURE_NO_TITLE);
)
您的活动应该具有 SurfaceHolder.callback 实现以处理回调,就像何时准备填充Framebuffer一样。将Surface Alder对象作为SurfaceView.getholder()Incase您要设置视图的像素格式等。
一次" surfacececreated "回调您可以安全地将您的SurfaceView对象(也可以通过宽度和高度传递,也许也是一个好主意)到本机,以便您可以使用" AnativeWindow"类填充IT framebuffer。
检查NDK示例代码以查看如何使用类NDK文档
SurfaceHolder.Callback文档
表面持有人文档
本质上,您需要这些(在JB/Kitkat上)
-
获取与
ANativeWindow_fromSurface
的SurfaceView相关的本机窗口(AnativeWindow)。 -
通过
ANativeWindow_acquire
在AnativeWindow上获取锁。 -
设置几何参数(窗口,宽度,高度,pf),用于本机window
ANativeWindow_setBuffersGeometry
-
加载本机窗装有frambuffer存储(如果有的话,请使用肮脏的矩形)由
ANativeWindow_lock
-
最终步骤解锁和发布更改
ANativeWindow_unlockAndPost
如果您需要示例代码,请浏览NDK示例示例