Управление запросами AndroidPermissionRequest и MediaPermissionRequest с помощью Geckoview Android - PullRequest
0 голосов
/ 28 мая 2019

У меня сейчас проблема с управлением запросами с использованием geckoview. Android, встроенный в webview, не подходит для меня, потому что веб-сайт, который я хочу открыть, несовместим с Chrome. Его можно открыть только с помощью mozilla, поэтому geckoview - моя альтернатива.

У меня проблема с предоставлением разрешения на использование микрофона и запись звука. Потому что сайт, который я пытаюсь открыть в geckoview, записывает аудио (Voice Collection).

Я новичок в 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

Это моё разрешение.

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 выдано» , и после этого отображается журнал, который я поместил, который «Требуется разрешение мультимедиа» , а на веб-сайте написано «Ожидание микрофон '

Я также проверил приложение на своем телефоне, и у него уже есть разрешение на микрофон.

...