Android 7 jni open() не работает + управление камерой USB
Я использовал этот пример с ioctl на Android 4.4, 5.1 https://github.com/theicfire/simplewebcam/blob/master/jni/ImageProc.c
Я использую этот интерфейс для ручного управления такими параметрами, как контраст, усиление, экспозиция, уровень белого и т. Д., Когда я пытался переместить приложение на Android 7, файл fd не открывается.
fd = open (dev_name, O_RDWR | O_NONBLOCK, 0);
Есть ли способ это исправить?
Я проверил, и camera2.api не позволяет управлять необходимыми мне параметрами с камеры, и собственный код не работает из-за этой ошибки.
редактировать: если быть более точным, я использую USB-камеру, подключенную к планшету, и Android 7 не позволяет met получить устройство FD, хотя я использую chmod 666 или 777 для установки разрешения. Есть ли способ обойти это или другой способ получить контроль над экспозицией, контрастом, усилением, белым lvl?
это код, который я добавил в части Java, код не удается в части canRead()
private void InitCameraDevice() throws Exception {
//set permissions to all /dev/video devices before checking them
General.RunAsRoot("chmod 666 /dev/video*");
NativeUtils.setLogName(General.getLogFileName());
File dir = new File("/dev");
File[] videoDevFiles = dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith("video");
}
});
boolean cameraFound = false;
for (File deviceFile : videoDevFiles) {
// Process file
if(deviceFile.canRead()) {
cameraFound = (NativeUtils.prepareCamera(deviceFile.getAbsolutePath(), frameWidth, frameHeight) != -1);
if (cameraFound)
break;
}
else
General.logd(STREAM_THREAD_TAG, "Insufficient permissions on [" +
deviceFile.getAbsolutePath() +"].");
}
if(!cameraFound)
throw new Exception("UVC Camera not found!");
}
Спасибо за помощь
1 ответ
Вам нужно использовать API-интерфейс Android USB-менеджера, чтобы получить FD для вашего USB-устройства; прямой доступ к узлу /dev обходит соблюдение разрешений Android (см. руководство по USB здесь) для доступа к USB-устройствам.
Поэтому приложения, имеющие доступ к узлу /dev, представляют собой уязвимость системы безопасности, которая была заблокирована в более поздних выпусках Android.
Если у вас есть FD для USB-устройства из Java USB API, вы можете манипулировать им в собственном коде, если хотите.