赞
踩
Android webview h5 麦克风权限,摄像头(相机)权限实现与填坑。
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"/>
注意:前面两项需要app动态申请
activity.requestPermissions(new String[]{
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO},1111);
懒人快速做法(可直接copy代码)
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onPermissionRequest(PermissionRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
request.grant(request.getResources());
}
}
}
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
result.confirm();
return true;
}
}
最后完整的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; } });
可以简单这样理解,权限都是向宿主获得,那么app运行中系统中,app权限是向系统申请;h5运行中webview上,webview是app中使用的一个控件,可认为h5的权限是向webview或app申请的。这是要注意的区别,app获得权限不等于h5也获得了权限。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。