In a native call, I\'m trying to open(\"/dev/video4\", O_RDWR)
but I get errno EACCES 13 \"permission denied\".
If I run the same code* in an executable
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:
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
.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!
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.
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 )