Не удалось успешно запросить разрешение USB (UVCCamera) - PullRequest
0 голосов
/ 04 марта 2020

Я работаю над функцией ультрафиолетовой камеры c, и обычно могу запрашивать разрешения и использовать их в системе android10.0, но в системе android10.0 я напрямую получаю ошибку запроса на разрешение, и нет всплывающее окно с запросом на разрешение, я также попытался добавить фильтр намерений и метаданные в тег активности файла манифеста. Когда USB был вставлен, я непосредственно выбрал соответствующее приложение и предоставил разрешения, но USB-камера по-прежнему не работала должным образом , код:

<!--    AndroidManifrest.xml-->
<uses-feature android:name="android.hardware.usb.host" />

<!--    Activity-->
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    //定义广播标识
    private static final String ACTION_USB_PERMISSION = "com.tangtang.uvctest.USB_PERMISSION";
    //注册接收广播 获取到usb 权限时系统广播
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ACTION_USB_PERMISSION.equals(action)) {
                synchronized (this) {
                    UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if (device != null) {
                            //成功
                            toastMsg("permission succ for device " + device);
                        }
                    } else {
                        //The code will execute directly when requesting permissions
                        toastMsg("permission denied for device " + device);
                    }
                }
            }
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)){
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},0);
        }
        findViewById(R.id.test).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                requestPermission1();
            }
        });
    }

    private void requestPermission1() {
        //获取service
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
        //获取设备列表(一般只有一个,usb 口只有一个)
        HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();

        //绑定广播
        PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        //注册接收广播
        registerReceiver(mUsbReceiver, filter);
        //枚举设备
        while (deviceIterator.hasNext()) {
            UsbDevice device = deviceIterator.next();
            //请求权限
            manager.requestPermission(device, mPermissionIntent);
        }

    }

    private void toastMsg(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mUsbReceiver);
    }
}

...