2011-02-03 80 views
2

我有一個廣播接收器,用於監聽所有撥出的電話。在另一個活動中,我使傳出呼叫。在我的BC中,我希望能夠確定在活動中創建了哪些呼叫,因此我在撥打電話時使用putExtras()來放置標記字段。問題是,在BC的onReceive()我根本沒有看到額外的數據字段(返回null)。從廣播接收器收到意向時缺少附加功能

下面是相關活動代碼:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     appGlobal gState = (appGlobal)getApplicationContext(); 
     dh = gState.getSqlDataHelper(); 
     Bundle extras = getIntent().getExtras(); 
     if(extras != null) 
     { 
      phoneNumber = extras.getString("number"); 
     } 
     makePhoneCall(); 
     finish(); 
    } 

private void makePhoneCall() 
    { 

     if (phoneNumber.length() < 1) { 
      return; 
     } 
     String url = "tel:" + phoneNumber; 
     Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url)); 
     intent.putExtra("number", "bla"); 

     startActivity(intent); 
    } 

而且這裏是有關BC代碼:

public class CallMeNotServiceCallReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 

     if (intent.getStringExtra("number") != null) 
     { Log.w("bla", "HAS KEY!!!"); } 
... 

請問這種情況需要的PendingIntent?

回答

2

官方BroadcastReceiver API reference明確指出(第3款):

[...]的意圖廣播機制是從被用來啓動活動意圖完全分開的。 BroadcastReceiver無法查看或捕獲與startActivity()一起使用的Intents; [...]

所以傑森&地獄男爵建議,而不是開始在makePhoneCall()的活動,你發送一個廣播你的廣播接收器,這反過來又開始一個活動(只有當它包含標記額外當然)...

1

如果您添加額外的日誌記錄,您是否發現BroadcastReceiver實際上根本不會被調用?

使用sendBroadcast(intent)發送BroadcastReceiver將收到的Intent。您目前正在使用startActivity,它預計具有特定活動類的意圖啓動。

+0

廣播接收器_does_被調用,只是額外不在那裏。據我所知,我有 - 要使用startactivity撥打電話,不是嗎? – Suan 2011-02-03 04:04:37