当前位置:   article > 正文

Android WebView加载h5打开麦克风与摄像头的权限问题_webview 麦克风

webview 麦克风


Android webview h5 麦克风权限,摄像头(相机)权限实现与填坑。

快速处理

app向系统申请录音与相机权限

app 必须先具备如下权限(本文只讨论录音与相机)
AndroidManifest中添加:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
  • 1
  • 2
  • 3

注意:前面两项需要app动态申请

activity.requestPermissions(new String[]{
                    Manifest.permission.CAMERA,
                    Manifest.permission.RECORD_AUDIO},1111);
  • 1
  • 2
  • 3

h5向app申请录音和相机权限

懒人快速做法(可直接copy代码)

  1. 默许授权(不再确认)
    当h5向app申请的时候,重写WebChromeClient的onPermissionRequest 函数,直接授权。
webView.setWebChromeClient(new WebChromeClient(){
 		   @Override
           public void onPermissionRequest(PermissionRequest request) {
               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                  request.grant(request.getResources());
               }
           }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 默许弹框的确认(不弹框)
    当h5向app申请的时候,重写WebChromeClient的onJsAlert 函数,直接确认。
webView.setWebChromeClient(new WebChromeClient(){
@Override
           public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               result.confirm();
               return true;
           }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

最后完整的WebChromeClient类至少重写上述两个函数:

webView.setWebChromeClient(new WebChromeClient(){
           @Override
           public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
               Log.w(TAG,"onConsoleMessage " + consoleMessage.messageLevel() + " " + consoleMessage.message());
               return super.onConsoleMessage(consoleMessage);
           }

           @Override
           public void onPermissionRequest(PermissionRequest request) {
               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

                  request.grant(request.getResources());
                   request.getOrigin();
               }
           }

           @Override
           public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               result.confirm();
               return true;
           }
       });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

详细解答

app权限与h5权限

可以简单这样理解,权限都是向宿主获得,那么app运行中系统中,app权限是向系统申请;h5运行中webview上,webview是app中使用的一个控件,可认为h5的权限是向webview或app申请的。这是要注意的区别,app获得权限不等于h5也获得了权限。

  1. app 权限
    这里的app权限,指app部分功需要的系统权限,例如相机/存储/网络权限,是app向系统申请的权限。
    6.0之前,只需要把权限配置到AndroidManifest文件中就可以了,到6.0,除了需要在AndroidManifest配置对应全限外,还需要动态申请,也就是通过api调用来让用户确认是否给该app某个权限。用得最多的是存储权限,音视频横行的今天,相机/录音/蓝牙/定位是常见需要动态申请。这种询问申请模式可能会延续很长一段时间甚至一直持续下去。
    为隐私数据的安全,app的权限是越来越严格,一方面是技术层面的趋势,一方面是隐私政策以及法规的约束,使得应用各方面的去满足(迎合)合规。
    权限就是其中一项,基于系统,app需要向系统申请,同时系统再向使用者申请,最终确定是否具备相关权限。
    一般情况下,app为保证功能正常,会在启动的时候一并申请所有的权限(需动态申请的),但在很多合规检测中,这是不合规的,因为存在权限申请了不用的(过多申请,例如申请了相机权限,只在主页停留就退出),也就要求用时申请。同时有些合规还要求在申请前详细提醒用户,这样就出现了一个不好的体验:当需要申请时先弹一个提示框(app),再弹一个授权框(系统),为了合规也得照做。
    延伸:当前并没有一个统一的合规标准,很多公司有关系就能够做这块业务,而且做得很
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/175149
推荐阅读
相关标签