Android NDK open() device permission denied

风流意气都作罢 提交于 2019-11-29 15:46:38

Since you get an error when running your code from an Android Java application, I would guess that you are missing a permission. It's the camera that you are trying to access, if I am not mistaken, so if you add:

 <uses-permission android:name="android.permission.CAMERA" />

to your AndroidManifest.xml, your application should run fine.

Since I'm building Cyanogenmod 12.1 (API 22) with other minor hacks I was able to get permissions for /dev/video* in my app by using the following hacks:

  1. For standard Linux permissions, android.permission.CAMERA no longer seems to allow access to /dev/video* even though they're owned by system:camera. Instead, I edited device/samsung/klte-common/rootdir/etc/ueventd.qcom.rc and changed the /dev/video* line to 0666.
  2. For SE Linux permissions, I added the line allow untrusted_app video_device:chr_file rw_file_perms; to external/sepolicy/untrusted_app.te.

After rebuilding and installing the image, my JNI lib is able to access /dev/video* and my client is happy!

The answers was not enough for me, so I left one more anwser. open API has more parameter 'mode'.

int open(const char *pathname, int flags, mode_t mode);

check out the link http://man7.org/linux/man-pages/man2/open.2.html

you might need to use 'open' with S_IRWXU option. like

open("/dev/video4", O_RDWR | O_CREAT, S_IRWXU )

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!