Как закончить входящий вызов программно на Android 8.0 Oreo

До Android 7.1 можно было завершить входящий вызов с помощью метода ITelephony.endCall() и предоставить вашему приложению разрешения android.permission.CALL_PHONE и android.permission.READ_PHONE_STATE.

Когда вы делаете то же самое на Android 8.0 Oreo (API 26), я получаю эту ошибку

12-09 18: 11: 25.195 16833-16833/li.doerf.leavemealone E/TelephonyServiceCallHangup: Отсутствует разрешение MODIFY_PHONE_STATE, не может повесить вызов

Так как MODIFY_PHONE_STATE является защищенным разрешением, мое приложение не может его получить. Есть ли способ программно завершить входящий вызов на Android 8.0+?

Ответ 1

Пожалуйста, проверьте ниже ссылку 2, которая вам полезна:

Разрешение предоставляется только системному приложению, в манифесте

https://source.android.com/devices/tech/config/perms-whitelist

ссылка выше используется для белого списка вашего разрешения MODIFY_PHONE_STATE. Это делается для целей безопасности, поэтому, если вы хотите получить доступ к этому виду разрешения в то время для белого списка вашего разрешения после того, как вы вызовете свои операции.

Я думаю, что в соответствии с последним обновлением android oreo вы можете получать телефонный звонок в своей деятельности с использованием встроенной реализации метода, но они не предоставляют разработчику возможность завершить окончание вызова. Также получите (прочитанный) номер телефона принимающего вызова, но вам нужно определить его разрешение. Я думаю, что мое описание выше, чтобы понять

Надеюсь, вы поймете и закроете этот вопрос.

Ответ 2

Попробуйте использовать отражение, как в ответе здесь.

Он работает с разрешениями READ_PHONE_STATE и CALL_PHONE. Эти разрешения доступны для несистемных приложений, в соответствии с android docs

Ответ 3

Вам нужно добавить это разрешение в свой манифест -:

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