一、确定USB摄像头的名称
String nodeNames[] = android_command("ls /sys/class/video4linux");
public static String[] android_command(String cmd) {
String result = null;
String con = "";
Process p;
try {
p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((result = br.readLine()) != null) {
if(!TextUtils.isEmpty(result)){
result.trim();
con += result + "`";
}
}
if(!con.equals("")){
con=con.substring(0,con.length()-1);
}
} catch (IOException e) {
e.printStackTrace();
}
return con.split("`");
}
二、设置权限
upgradeRootPermission(cameraNodes); // 设置权限
initCamrea(context,cameraNodes);
/**
* USB摄像头的挂在路径设置为root权限
* @param pdkCodePath
*/
private void upgradeRootPermission(String [] deviceNodes) {
Process process = null;
DataOutputStream os = null;
String pdkCodePath = MyApp.getInstance().getPackageName();
Log.d(TAG, "upgradeRootPermission , pdkCodePath = " + pdkCodePath);
try {
String cmd = "chmod 777" + pdkCodePath;
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(cmd + "\n");
for(String strNode : deviceNodes){
String cmd1 = "chmod 777 /dev/"+ strNode;
Log.d(TAG, "upgradeRootPermission , cmd1 = " + cmd1);
os.writeBytes(cmd1 + "\n");
}
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void initCamera(){
String startCamera0 = "-d /dev/" + deviceNode[0] + " -r 640*480 -f 25 -n";
int nRetSucceed = USBCamCtrl.UVCInit(context, startCamera0);
if (nRetSucceed == 0) {
nRetSucceed = USBCamCtrl.UVCRun(deviceNode[0]);
}