【问题标题】:Move the Default Incoming Calling Screen to Background on TelephonyManager.CALL_STATE_RINGING in Android将默认来电屏幕移动到 Android 中 TelephonyManager.CALL_STATE_RINGING 的背景
【发布时间】:2016-05-12 08:22:52
【问题描述】:

我正在开发一个应用程序,我必须在其中覆盖传入呼叫屏幕。

当设备接到电话时,我必须显示我的应用程序的弹出窗口。我已经对这项任务进行了详细的研究。 CALL POPOUT 是一个使用相同功能的应用程序,但我没有得到源代码。

目前我有几个模块可以通过这些模块获得 INCOMING CALL 的操作。

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 屏幕出现在呼叫屏幕的顶部,但只持续了几微秒,然后传入的呼叫屏幕出现在顶部。 当设备收到任何呼叫并需要显示我的应用程序屏幕时,我必须隐藏呼叫屏幕。

请提出建议。

【问题讨论】:

  • 嘿@Sam-In-TechValens,你最终解决了这个问题吗?

标签: android phone-state-listener activity-manager incoming-call


【解决方案1】:

当有来电时,您的活动和默认来电活动都会显示。如果您的活动首先显示,然后传入的活动将显示在您的活动之上,它是任务和回栈的东西。

解决方案:当您的活动显示时,然后检查传入的活动是否显示在您的上方 --> 再次将您的活动移到顶部,除非用户关闭您的活动。

请看我对similar question here的回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-05-11
    相关资源
    最近更新 更多