• 记一次Android调用外部摄像头失败的问题


    问题代码

    if (mUsbManager.hasPermission(device)) {
      process(device);
    } else {
      try {
        // パーミッションがなければ要求する
        mUsbManager.requestPermission(device, mPermissionIntent);
      } catch (final Exception e) {
        // Android5.1.xのGALAXY系でandroid.permission.sec.MDM_APP_MGMTという意味不明の例外生成するみたい
        processCancel(device);
      }
    }

    现象描述

    这里本应该在判断没有权限时会动态的申请USB权限,并弹窗请求确认。
    实际运行时,会判断没有权限,进入请求权限,不会弹窗请求确认,并且不会抛出异常,再次运行时仍然是没有权限。

    有说日志会打印这段话,我这没看到,可能是日志太多没注意到。

    UsbUserSettingsManager: Camera permission required for USB video class devices

    原因

    SDK版本的问题,SDK28之后需要先授权camera权限之后,才可以正常运行。
    经测试手动授权camera之后就可以正常调用摄像头了。

    解决办法

    manifest里加入

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

    Activity里加入动态申请相机、和存储权限代码。由于请求权限是异步的,所以需要在调用摄像头之前就申请完。

    ActivityCompat.requestPermissions(this,
        new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},
        1);

    高版本的运行没问题,低版本的系统运行时每次都会弹出授权,需要加个判断。

    if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this,
          new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},
          1);
    }

    但是这个判断在高版本里不兼容,所以要兼容的话还需要加一个版本判断(android.os.Build.VERSION.SDK_INT)

    顺便推荐一下ADB WIFI  插件 手机只有一个usb口,插上设备就不能调试,买的分线器也不行,后来发现这款插件,可以插着设备调联机调试了

  • 相关阅读:
    attributeError:'module' object has no attribute ** 解决办法
    Pyqt+QRcode 生成 识别 二维码
    Pyqt 打包资源文件
    Pyqt 设置 背景颜色和背景图片、 QPalette 调色板 与QPainter 画板区别 、 不规则图片
    Pyqt清空Win回收站
    【转载】pyqt QTableWidget的使用
    Pyqt QComboBox 省市区县联动效果
    pyinstaller打包pyqt文件
    Qt Designer怎样加入资源文件
    【转载】 JQuery.Gantt(甘特图) 开发指南
  • 原文地址:https://www.cnblogs.com/raym/p/13431546.html
Copyright © 2020-2023  润新知