Как закончить входящий вызов программно на 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"/>