2011-04-08 43 views
1

我正在使用广播接收器来拦截电话。我想用来电者的姓名覆盖默认的来电屏幕。我有一个数据库的应用程序,与联系人分开保存电话号码。BroadcastReceivers和PopUps

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

我在做什么错?

我的呼叫Reciver:

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

我缺少什么?

+0

这应该是不可能的。您可能会收到电话通知,但我不相信您可以取消默认来电屏幕。也许你必须建立你自己的系统映像或者比默认的屏幕大一些。 – 2011-04-08 09:48:35

回答

0

尝试:

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

Activity,在设计上,始终占用整个屏幕。如果您希望Activity显示为仅部分阻止来电屏幕,则可能需要尝试使Activity主题半透明,如here所述。

您可能还必须清除活动堆栈(Intent.FLAG_ACTIVITY_CLEAR_TOP),以使先前打开的Activites不会在下方悬空。

相关问题