1

我很難使用/理解BroadcastReceivers和IntentFilters。我的測試活動中有以下代碼。測試活動包含一個.addProximityAlert,如果.addProximityAlert被觸發,我想廣播到Test2接收器。我測試這個時發生錯誤。我究竟做錯了什麼?爲什麼我的接收器不接收廣播?

測試活動:

public class Test extends BroadcastReceiver 
{ 
    LocationManager lm; 
    ... 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     ... 
     final String PROX_ALERT_INTENT = "com.example.proxalert.Test2"; 
     Intent alert = new Intent(PROX_ALERT_INTENT); 
     PendingIntent proximityIntent = PendingIntent.getBroadcast(context, 0, alert, 0); 

     lm.addProximityAlert(latitude, longitude, radius, expiration, proximityIntent); 

     IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
     context.registerReceiver(new Test2(), filter); 

Test2的接收機:

public class Test2 extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
    String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     Boolean entering = arg1.getBooleanExtra(key, false); 
     if (entering) { 
     //toast notification "welcome" 
    } 
    ... 
+1

後的異常堆棧 – Atrix1987

+1

請使用logcat的,看你的「錯誤」相關的堆棧跟蹤。如果您不明白,請將其複製並通過上面的「編輯」鏈接粘貼到您的問題中。 – CommonsWare

回答

2

測試延伸廣播接收機,所以它必須被通知廣播的得到激活。你確定這就是你想要做的?

它真的是一個測試Android?我不這麼認爲。因此,如果您只是要使用該代碼移除Test類,請使用按鈕創建一個活動,然後在單擊該按鈕時在Test中執行您的代碼。

+0

@thedeepfield做了任何答案符合您的要求? – Snicolas

+0

謝謝你的賞金,但你能接受答案嗎? – Snicolas

1

喜用BroadcastReceivers和IntentFilters給你這樣的活動(或服務)下:

   broadcastReceiver = new BroadcastReceiver() {//global BroadcastReceiver 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       String action = intent.getAction(); 
       //Action receive 
      }; 

意圖過濾器:

 IntentFilter intentfilterTime = new IntentFilter(); 
     intentfilterTime.addAction(Intent.ACTION_BATTERY_CHANGED);//receive battery level change 
     registerReceiver(broadcastReceiver, intentfilterTime); 

添加要接收所有行動。 你的代碼不起作用,因爲你在另一個裏面使用廣播我不認爲這是你想要的。

1

你可以簡單地在同一時間和控制寄存器二者的廣播接收器的實現,通過簡單的方法,像

  • 禁用它們使用靜態/非靜態布爾變量
  • 使用偏好持有鍵值

例如:

public class Test extends BroadcastReceiver 
{ 
    LocationManager lm; 
    ... 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
    ... 
      final String PROX_ALERT_INTENT = "com.example.proxalert.Test2"; 
     Intent alert = new Intent(PROX_ALERT_INTENT); 
     PendingIntent proximityIntent = PendingIntent.getBroadcast(context, 0, alert, 0); 

     lm.addProximityAlert(latitude, longitude, radius, expiration, proximityIntent); 

     IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
     Test2.someStaticVariable = true; 


public class Test2 extends BroadcastReceiver { 
    public static boolean someStaticVariable; 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 

    if (!someStaticVariable){ 
     return; 
    } 

    String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     Boolean entering = arg1.getBooleanExtra(key, false); 
     if (entering) { 
     //toast notification "welcome" 
    } 
    ...