在Android中的TelephonyManager.CALL_STATE_RINGING上将默认传入呼叫屏幕移至背景

我正在开发一个应用程序,我必须覆盖INCOMING CALL SCREEN.

当设备收到呼叫时,我必须显示我的应用程序的弹出窗口.我已经对这项任务进行了详细的研究. 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屏幕在呼叫屏幕的顶部,但只是少量微秒钟,然后进入呼叫屏幕在顶部.
当设备接到任何电话并且需要显示我的应用程序的屏幕时,我必须隐藏呼叫屏幕.

请建议.

解决方法

有来电时,您的活动和默认传入活动都会显示.如果您的活动首先显示,那么稍后传入的活动将显示在您的活动上,它是任务和后台堆栈.

解决方案:当您的活动显示时,请检查传入的活动是否显示在您的活动上 – >将您的活动再次移到最前面,除非用户解除您的活动.

请参阅我对similar question here的回答

相关文章

AdvserView.java package com.earen.viewflipper; import an...
ImageView的scaleType的属性有好几种,分别是matrix(默认)...
文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...