2016-09-20 23 views
0

我不明白這段代碼有什麼問題。爲什麼Android的LocalBroadcastManager未運行?

監聽器是活動的的onCreate:

private BroadcastReceiver receiver; 
private Context context; 

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

    setContentView(R.layout.activity_main); 
    context = getApplicationContext(); 

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

      Log.e("MAIN onCreate: ", "It is never shown."); 

     } 
    }; 
} 

的寄存器是在活動的onResumen:

@Override 
protected void onResume() { 
    super.onResume(); 
    registerReceiver(receiver, new IntentFilter("receiveMyService")); 
} 

發件人是一個按鈕,我可以看到日誌工作完美,但與測試的值爲false:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     Intent intent = new Intent("receiveMyService"); 
     Boolean test = LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
     Log.e("Button", "It works but test is always false: " + test); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

爲什麼代碼BroadcastReceiver - onReceive從未運行?

+0

後完整的代碼 –

回答

1

因爲您註冊一個BroadcastReceiver不是LocalBroadcastReceiver
替換此:

registerReceiver(receiver, new IntentFilter("receiveMyService")); 

與此

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("receiveMyService")); 
+0

尚未工作。 – andres83