我目前在使用geckoview
管理请求时遇到问题。内置webview
的Android对我来说不是一个选择,因为我要打开的网站与chrome不兼容。只能使用mozilla
打开它,因此geckoview
是我的选择。
我遇到的问题是授予使用麦克风和录制音频的权限。因为我要在geckoview中打开的网站记录了音频(语音收集)。
我是android和geckoview的新手,这就是为什么我使用的指南是这个项目https://searchfox.org/mozilla-central/source/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java
我能够显示请求权限并接受它,但是看来我的应用程序没有存储该权限结果。目前,我正在尝试将程序访问此网站https://www.onlinemictest.com
这是我的PermissionDelegate
private class ExamplePermissionDelegate implements GeckoSession.PermissionDelegate {
public int androidPermissionRequestCode = 1;
@Override
public void onAndroidPermissionsRequest(GeckoSession session, String[] permissions, Callback callback)
{
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED){
Log.i(TAG, "Android Permission Needed");
requestPermissions(permissions, androidPermissionRequestCode);
callback = new ExamplePermissionCallback();
callback.grant();
}
else{
Log.i(TAG, "Android Permission Granted");
callback.grant();
}
}
@Override
public void onContentPermissionRequest (GeckoSession session, String uri, int type, String access, Callback callback)
{
Log.i(TAG, "Content Permission Needed");
}
@Override
public void onMediaPermissionRequest (GeckoSession session, String uri, MediaSource[] video, MediaSource[] audio, MediaCallback callback)
{
Log.i(TAG, "Media Permission Needed");
}
}
这是我的PermissionDelegateCallback
public class ExamplePermissionCallback implements GeckoSession.PermissionDelegate.Callback{
@Override
public void grant() {
int permission = ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.RECORD_AUDIO);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.RECORD_AUDIO},
RECORD_REQUEST_CODE);}
}
@Override
public void reject() {
}
}
结果显示为'已授予Android权限',此后,它显示我输入的日志为'需要媒体权限',网站显示为等待麦克风”
我还检查了手机上的应用程序,它已经具有麦克风许可。
答案 0 :(得分:0)
GeckoView具有两个级别的权限:
简而言之,仅仅因为您的应用有权收听麦克风,并不意味着您在GeckoView中打开的所有网页都可以访问麦克风。
当页面请求媒体许可时,您会收到onMediaPermission
回调,您需要使用callback.grant
接受该回调,此处是一个示例:https://searchfox.org/mozilla-central/rev/3483fb259b4edbe4594cfcc3911db97d5441b67d/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/BasicGeckoViewPrompt.java#927
audio
的{{1}}自变量包含所有音频源(很可能只有一个麦克风)的列表,可用于接受正确音频源的提示打电话
onMediaPermission
请注意,如果您还需要视频,则可以使用@Override
public void onMediaPermissionRequest(
GeckoSession session,
String uri,
MediaSource[] video,
MediaSource[] audio,
MediaCallback callback)
{
// Find out which audio source is the microphone
final int MICROPHONE_INDEX = ...;
// Grant the request
callback.grant(null, audio[MICROPHONE_INDEX]);
}
参数和适当的视频源来做同样的事情。
要弄清楚哪一个是麦克风,您可以使用以下代码段作为示例(查找video
)https://searchfox.org/mozilla-central/source/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java#1201-1223