Android Webview授予相机权限的配置方法及代码实现指引
问题解决全步骤
1 先修正现有Activity的两处基础错误
你的原代码有两个容易忽略的小问题,先改掉避免后续报错:
- 类定义末尾多余的泛型声明需要删除,将
public class ThirdActivity<Webview> extends AppCompatActivity修改为public class ThirdActivity extends AppCompatActivity - onCreate方法中重复定义了webView1变量,你已经在类头部声明了全局的
private WebView webView1,所以将onCreate里的WebView webView1 = (WebView) findViewById(R.id.webView1);删掉开头的类型声明,改为webView1 = (WebView) findViewById(R.id.webView1);即可。
2 加入WebChromeClient权限处理代码
你找到的这段代码直接加在webView1.setWebViewClient(new WebViewClient());的下一行即可,修改后的代码片段如下:
webView1.setWebViewClient(new WebViewClient()); // 新增代码开始 webView1.setWebChromeClient(new WebChromeClient() { @Override public void onPermissionRequest(final PermissionRequest request) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { request.grant(request.getResources()); } } }); // 新增代码结束 webView1.loadUrl("替换为你需要访问的、要调用相机的网页地址");
3 补充运行时权限申请
Android 6.0及以上版本,相机、录音这类敏感权限除了在Manifest里声明,还需要在App运行时主动向用户申请授权,否则网页也拿不到权限。在onCreate方法的setContentView(R.layout.activity_third);之后加入以下代码即可:
// 动态申请相机、录音权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (checkSelfPermission(Manifest.permission.CAMERA) != android.content.pm.PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.RECORD_AUDIO) != android.content.pm.PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, 100); } }
最终验证
你原有的Manifest权限配置已经符合要求不需要修改,改完以上三处代码后重新编译运行App,第一次打开时会弹出权限申请框,点击允许后再进入需要调用相机的网页就可以正常使用相机功能了。
内容的提问来源于stack exchange,提问作者Aquilon
相关产品推荐
相关产品推荐

