Принимать входящие звонки Android Studio

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

Я работаю над таким приложением. https://play.google.com/store/apps/details?id=com.colorphone.smooth.dialer&hl=en

Я много искал и успешно реализовал функцию, с помощью которой приложение может обнаруживать входящий вызов (следуя этому Как обнаружить входящие вызовы на устройстве Android?) и открывает действие, в котором у пользователя есть два варианта: принять входящий вызов или отклонить его. Проблема в том, что я не могу принять/отклонить входящий вызов программно. Я много ищу, но не смог найти конкретного решения. Если бы кто-нибудь мог помочь мне в том, как я могу принять входящий вызов программно, это было бы здорово.


person Qalb Hussain    schedule 10.04.2018    source источник


Ответы (2)


Возможно, вы можете попробовать через {@link Context#getSystemService Context.getSystemService(Context.TELECOM_SERVICE)} получить объект TelecomManager, а затем вызвать метод acceptRingingCall() для ответа или вызвать метод endCall() для отклонения вызова.

public class TelecomManager {

/**
 * If there is a ringing incoming call, this method accepts the call on behalf of the user.
 *
 * If the incoming call is a video call, the call will be answered with the same video state as
 * the incoming call requests.  This means, for example, that an incoming call requesting
 * {@link VideoProfile#STATE_BIDIRECTIONAL} will be answered, accepting that state.
 *
 * Requires permission: {@link android.Manifest.permission#MODIFY_PHONE_STATE} or
 * {@link android.Manifest.permission#ANSWER_PHONE_CALLS}
 */
//TODO: L-release - need to convert all invocation of ITelecmmService#answerRingingCall to use
// this method (clockwork & gearhead).
@RequiresPermission(anyOf =
        {Manifest.permission.ANSWER_PHONE_CALLS, Manifest.permission.MODIFY_PHONE_STATE})
public void acceptRingingCall() {
    try {
        if (isServiceConnected()) {
            getTelecomService().acceptRingingCall(mContext.getPackageName());
        }
    } catch (RemoteException e) {
        Log.e(TAG, "Error calling ITelecomService#acceptRingingCall", e);
    }
}
person ppp wang    schedule 04.05.2018

Начиная с выпуска Marshmallow, разрешения во время выполнения необходимы для доступа к телефону пользователя и данным пользователя.

Теперь, что касается вашего вопроса, для перехвата вызова через грамматику вам нужны 2 разрешения
Manifest.permission.ANSWER_PHONE_CALLS и Manifest.permission.MODIFY_PHONE_STATE

но MODIFY_PHONE_STATE не предназначен для использования сторонними приложениями.

Прочтите эту документацию.

person Amrish Kakadiya    schedule 04.05.2018