Совершить звонок на Android 10

Я сделал приложение, которое автоматически звонит, если заранее настроенный код приходит в SMS.

Изначально я создавал это приложение для Android 9, и оно работало хорошо, пока я использую Android 9, но мой телефон был обновлен до версии Android 10, и он просто перестал работать.

Анализируя логи и отлаживая приложение, не появляется ни одного сообщения об ошибке. Отладка, все работает, штрафуется, и я называю ее следующим образом:

Intent in = new Intent(Intent.ACTION_CALL);
in.setData(Uri.parse(callPhone));
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(in);

Но ничего не происходит. Его просто не привлекают. Я установил на другие устройства, использующие другие версии Android, и все еще работает, но не в Android 10.

Кто-нибудь знает, было ли реализовано что-то другое или есть новый способ позвонить в версии Android 10?

* ПРИМЕЧАНИЕ. Я также пытался обновить код, чтобы использовать библиотеку androidx, измененную для использования targetSdkVersion 29, но все та же.


person Emerick    schedule 06.01.2020    source источник


Ответы (1)


Android 10 может запускать действия только в фоновом режиме. Для этого есть некоторые исключения. На мой взгляд, проще всего запросить разрешение «SYSTEM_ALERT_WINDOW». Надеюсь, это поможет.

https://developer.android.com/guide/components/activities/background-starts

https://stackoverflow.com/a/59421118/11982611

В манифесте:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

Где-то в вашем коде

private void RequestPermission() {
            // Check if Android M or higher
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // Show alert dialog to the user saying a separate permission is needed
                // Launch the settings activity if the user prefers
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:" + getActivity().getPackageName()));
                startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
            }
        }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.canDrawOverlays(getContext())) {
                    PermissionDenied();
                }
                else
                {
                 //Permission Granted-System will work
            }

        }
    }
person Eren Tüfekçi    schedule 06.01.2020
comment
Сработало у меня !!!!!!! Спасибо. - person Rafael Nonino; 22.01.2021