Переместите экран входящих вызовов по умолчанию в фоновый режим на TelephonyManager.CALL_STATE_RINGING в Android

Я работаю над приложением, в котором мне нужно переопределить ЭКРАН ВХОДЯЩЕГО ВЫЗОВА.

Когда устройство получает вызов, я должен показать всплывающее окно моего приложения. Я подробно изучил эту задачу. CALL POPOUT — это приложение, использующее ту же функциональность, но я не получаю исходный код.

В настоящее время у меня есть несколько модулей, с помощью которых мы можем получить действие ВХОДЯЩЕГО ВЫЗОВА.

public class MyPhonestateListner extends PhoneStateListener {
    Context context;
    List<String> blockedNumberList = new ArrayList<String>();
    BlockDataSource datasourceobj;

    public MyPhonestateListner(Context context) {
        super();
        this.context = context;

    }

    @Override
    public void onCallStateChanged(int state, String callingNumber) {
        super.onCallStateChanged(state, callingNumber);
        callingNumber = callingNumber.replace(" ", "");
        switch (state) {

        case TelephonyManager.CALL_STATE_IDLE:
            break;

        case TelephonyManager.CALL_STATE_OFFHOOK:
            // handle out going call
            // if(blockedNumberList.contains(callingNumber))
            endCallIfBlocked(callingNumber);
            break;

        case TelephonyManager.CALL_STATE_RINGING:
            // handle in coming call
             new Handler().postDelayed(new Runnable() {
                  public void run() {
                      Intent intentPhoneCall = new Intent("android.intent.action.CALL");
                              intentPhoneCall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  context.startActivity(intentPhoneCall);
                          }
                     }, 10);
            // if(blockedNumberList.contains(callingNumber))
            //endCallIfBlocked(callingNumber);
            // ActivityManagerNative.getDefault().moveTaskToBack(i);
            //android.app.ActivityManager.RunningTaskInfo runningtaskinfo = TaskUtil.getPresentTaskInfo(this);
            break;

        default:
            break;
        }
    }


}


MY reciever

public class BlockReciever extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("I am reciever");
        TelephonyManager telephony = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        MyPhonestateListner listener = new MyPhonestateListner(context);
        telephony.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    }
}

С помощью приведенного выше кода я получаю экран MAP моего приложения в ВЕРХНЕЙ части ЭКРАНА ВЫЗОВА, но ТОЛЬКО НА НЕСКОЛЬКО МИКРОСЕКУНД, а затем появляется ЭКРАН ВХОДЯЩЕГО ВЫЗОВА. Я ДОЛЖЕН СКРЫТЬ ЭКРАН ВЫЗОВА, когда устройство получает любой вызов, и мне нужно показать экран моего приложения.

Пожалуйста, предложите.


person Sam-In-TechValens    schedule 17.12.2014    source источник
comment
Привет @Sam-In-TechValens, тебе удалось решить эту проблему в конце концов?   -  person Nikola    schedule 22.02.2018


Ответы (1)


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

Решение: когда отображается ваша активность, проверьте, отображается ли входящая активность поверх вашей --> снова переместите свою активность сверху, за исключением того, что пользователь отклонит вашу активность.

См. мой ответ на подобный вопрос здесь

person Binh Tran    schedule 12.05.2016