BroadcastReceivers和PopUps

时间:2011-04-08 05:49:30

标签: android

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

我正在拦截通话,但是当我显示弹出窗口时,它不会覆盖默认的来电屏幕。来电屏幕打开,然后由我的应用程序替换(它转到最后一个打开的活动)并覆盖弹出窗口。

我做错了什么?

我的呼叫接收器:

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);
    }
}

我错过了什么?

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

Activity按设计总是接管全屏。如果您希望Activity看起来好像只是部分阻碍来电屏幕,您可能需要尝试按Activity主题进行半透明搜索,如上所述here

您可能还需要清除活动堆栈(Intent.FLAG_ACTIVITY_CLEAR_TOP),以防止先前打开的Activites在下面停留。