Не могу совершать голосовые звонки с веб-страницы в Android WebView - PullRequest
0 голосов
/ 22 марта 2019

У меня есть приложение с веб-представлением, которое загружает список контактных данных, которые пользователи могут совершать голосовые вызовы, нажав на этот номер. На веб-странице используется тег tel: . Ниже приведен код, который я написал.

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        final Uri uri = request.getUrl();
        if (uri.toString().startsWith("tel:"))
            makePhoneCall(uri.toString());
        return super.shouldOverrideUrlLoading(view, request);
    }

makePhoneCall ()

public void makePhoneCall(String phoneNumber) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
        Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL);
    checkPermissions();
} else {
    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(phoneNumber)));
}

}

проблема в том, что ..

После установки на многих устройствах, на некоторых устройствах пользователи не могут позвонить, при нажатии на номер ничего не происходит. Я уверен, что событие касания происходит, потому что через 5 секунд после нажатия на номер появляется всплывающее окно, которое работает нормально.

Некоторые устройства - Nokia, Asus Zenfone Max с Android Oreo.

Я проверил версии для Android, большинство устройств имеют версию для Android 6+.

  • Я запускаю webView в другом потоке, созданном из onCreate ();

пока на других устройствах все отлично работает.

Я не могу понять, что здесь происходит.

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Я бы предложил вам использовать Intent.ACTION_DIAL вместо ACTION_CALL, при использовании ACTION_DIAL вам не понадобится разрешение на вызов в приложении, просто откроется номеронабиратель с уже введенным номером и пользователь сможет решить, действительно ли они хотите позвонить или нет.

@Override
public boolean shouldOverrideUrlLoading(WebView view, String Url) {
    if (Url.startsWith("tel:")) {
            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(Url));
            startActivity(intent);
            return true;
    }
    return false;
}
1 голос
/ 22 марта 2019

Оба ответа выше верны. Мистер Патель ответ сказал, что это было вызвано ошибкой разрешения во время выполнения.Но даже после передачи в некоторых устройствах возникли проблемы.

Итак, я попытался user11185229's ответить , и он работает нормально.

1 голос
/ 22 марта 2019

Вы пытались предоставить разрешение во время выполнения для всего, что иногда, когда только определенные устройства с последними версиями Android создают проблемы, это в некоторой степени связано с разрешениями во время выполнения и совместимостью версий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...