我已经实现了WebChromeClient
,并且从onPermissionRequest
开始,我无法访问应用程序内部的“相机和音频”。
我的代码是
@Override
public void onPermissionRequest(PermissionRequest request) {
super.onPermissionRequest(request);
final String[] requestedResources = request.getResources();
for (String r : requestedResources) {
if ((r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) || r.equals(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) {
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE,PermissionRequest.RESOURCE_AUDIO_CAPTURE});
break;
}
}
}
但是我不断收到如下异常和错误
> W/System.err: **java.lang.IllegalStateException**: **Either grant() or
> deny() has been already called**. W/System.err: at
> org.chromium.android_webview.permission.AwPermissionRequest.b(chromium-TrichromeWebViewGoogle.aab-stable-1:3)
> at org.chromium.android_webview.permission.AwPermissionRequest.a(chromium-TrichromeWebViewGoogle.aab-stable-1:1)
> at xe.deny(chromium-TrichromeWebViewGoogle.aab-stable-1:1)
> at com.royalconx.MainActivity$MyChromeClient.onPermissionRequest(MainActivity.java:96)
> at org.chromium.android_webview.AwContents.onPermissionRequest(chromium-TrichromeWebViewGoogle.aab-stable-1:9)
> W/System.err: at android.os.MessageQueue.nativePollOnce(Native
> Method)
> at android.os.MessageQueue.next(MessageQueue.java:363)
> at android.os.Looper.loop(Looper.java:173)
> at android.app.ActivityThread.main(ActivityThread.java:8178)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
答案 0 :(得分:1)
如果您在第一行中有super
通话
super.onPermissionRequest(request)
然后,您可能无法像尝试下一个循环那样再次“手动”调用grant
或deny
。将您的代码移至super
调用上方,并确保不会为您自己处理的权限调用super
-使准备的PermissionRequest
没有这些,如果不为空(要求其他权限),则将此修改后的请求致电super
还请确保整个应用程序已获取适当的权限