2013-05-03 160 views
0

我已经构建了一个使用外部USB摄像头的Android应用程序。相机图像显示为全屏应用程序拍摄截图,并将它们存储在本地文件系统中。连接USB摄像头时,会创建并流到以下文件夹;Android:在/ dev/video0上设置666权限

的/ dev/video0的

该文件夹的每个摄像机断开时间破坏。

此问题是我的应用程序没有权限读取此文件夹。所以我必须在每次连接相机时设置权限。

我试图让应用程序自动设置权限,使用下面的代码;

Process sh = Runtime.getRuntime().exec(new String[]{"su", "-c", "system/bin/sh"}); 
sh = Runtime.getRuntime().exec(new String[]{"chmod", "666", "/dev/video0"});   
sh.waitFor(); 

...它要求用户授予超级用户权限,并给我的反馈告诉我,用户现在根 - 但是我可以通过该权限没有被更改的文件夹上看到终端。

任何帮助,将不胜感激

+0

喜欢这类型的几乎所有问题,你错就错在认为“苏”切换程序,以root身份运行。它没有,也没有任何工具可以这样做。相反,它所做的是以root身份运行给定的命令程序(在本例中为sh)。你将不得不让程序接受一个chmod命令和参数,或许一旦它启动就将其管道输入到shell进程中。它在这里被无数次覆盖。 – 2013-05-03 21:15:37

+0

嗨@ChrisStratton,你可以给一个例子,或者指向我在这个论坛中的一个,因为我的搜索没有发现任何有用的东西,谢谢 – 2013-05-04 13:06:36

+0

寻找su不工作类型android问题,有几十个,如果不是数百 – 2013-05-04 16:10:24

回答

0

我最终发现下面的代码很好用;

Process sh = Runtime.getRuntime().exec("su", null,null); 
OutputStream os = sh.getOutputStream(); 
os.write(("chmod 666 /dev/video0").getBytes("ASCII")); 
os.flush(); 
os.close(); 
sh.waitFor(); 

由于某些原因,命令必须通过OutputStream发送。

0

如果你不关心让这些权限在相机上的风险,你可以添加

/dev/video*    0666 system  camera 

/ueventd.rc

+0

感谢@dtmilano,我已经设法使用adb shell将此行添加到使用vi编辑器的/ueventd.rc中。但是我现在又遇到了另一个问题 - 重启后线路被删除,所以我无法测试它。有任何想法吗? – 2013-05-04 10:42:08

+0

许多ODM使用安全存储来重写** rootfs **,包括重启时的'/ ueventd.rc'。但是这种方法对定制ROM很不错。 – 2014-06-10 19:27:57

3

shell支持通过stdin读取命令(就像你在使用OutputStream一样)或者作为它的-c命令行选项的参数。例如,这也应该工作,如果你不想创建额外的对象:

Process sh = Runtime.getRuntime().exec(new String[]{"su", "-c", "/system/bin/sh -c \"chmod 666 /dev/video0\""}); 

这相当于在shell执行:

su -c "/system/bin/sh -c \"chmod 666 /dev/video0\"" 

您可以在亚行第一次尝试,如果你想。

在这种特殊情况下,因为你只执行一个命令,无论如何,你真的不需要在所有的壳可能只需要调用这个:

Process sh = Runtime.getRuntime().exec(new String[]{"su", "-c", "chmod 666 /dev/video0"}); 

而且添加到评论,你可以编辑ueventd.rc文件:该文件应该可以工作,但这些文件或者位于只读/系统分区(通过以读写方式重新编辑它很容易进行编辑),或者更可能是一些ramdisk(gzip压缩文件)闪到设备上的分区。后者不会那么容易,除非你能在闪存芯片上找到这个ramdisk镜像,将其解压缩,编辑文件,重新创建cpio,并将其写回闪存。

0

也许你只需要添加摄像头权限在AndroidManifest.xml:

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

haiming 2016-02-02 06:41:39