2011-04-08 18 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不會在下方懸空。