Android 广播接收器和弹出窗口

Android 广播接收器和弹出窗口,android,Android,我在用广播接收器拦截电话。我想用呼叫者的名字覆盖默认的来电屏幕。我有一个带有数据库的应用程序,它将电话号码与我的联系人分开保存 我正在拦截呼叫,但当我显示弹出窗口时,它不会覆盖在默认来电屏幕的顶部。来电屏幕打开,然后被我的应用程序替换(转到上次打开的活动),并覆盖弹出窗口 我做错了什么 我的来电接受器: public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context con

我在用广播接收器拦截电话。我想用呼叫者的名字覆盖默认的来电屏幕。我有一个带有数据库的应用程序,它将电话号码与我的联系人分开保存

我正在拦截呼叫,但当我显示弹出窗口时,它不会覆盖在默认来电屏幕的顶部。来电屏幕打开,然后被我的应用程序替换(转到上次打开的活动),并覆盖弹出窗口

我做错了什么

我的来电接受器:

public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
        Intent i = new Intent(context, IncomingCallPopup.class);
        i.putExtras(intent);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        context.startActivity(i);
    }
}}
我的弹出式活动:

public class IncomingCallPopup extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
        //getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.call_popup);

        String phoneNumber = getIntent().getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        TextView text = (TextView)findViewById(R.id.text);

        text.setText("Incoming call from " + phoneNumber);
    }
}
我错过了什么?

试试:

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);

一个
活动
,按照设计,总是占据整个屏幕。如果您希望您的
活动
显示为仅部分阻塞来电屏幕,您可能希望尝试使
活动
主题半透明,如前所述


您可能还必须清除活动堆栈(
Intent.FLAG\u Activity\u clear\u TOP
),以防止以前打开的活动挂在下面。

这在应用程序中是不可能的。可以通知您有来电,但我不相信您可以取消默认的来电屏幕。也许您必须构建自己的系统映像,或者拥有比默认值更大的屏幕。