1

我有一个活动与Fragment里面和IntentService。当我点击按钮对话框片段打开并输入我的数据。之后,我点击确定,它调用getActivity()。startService(intent)。服务通过LocalBroadcastManager调用sendBroadcast(intent),但onReceive()方法没有被调用。怎么了?还有我的广播接收器BroadcastReceiver的onReceive方法不被调用

private BroadcastReceiver mApiBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("tag", intent.getAction()); 
     switch (intent.getAction()) { 
      case "register": 
       showMessage(intent.getStringExtra(ApiService.EXTRA_ANSWER)); 
       break; 
      case "authorize": 
       showProfile((User) intent.getParcelableExtra(ApiService.EXTRA_USER)); 
       break; 
      default: 
       break; 
     } 
    } 
}; 

我在这里注册

@Override 
protected void onResume() { 
    super.onResume();  
    LocalBroadcastManager. 
     getInstance(this). 
     registerReceiver(mApiBroadcastReceiver, new IntentFilter(ApiService.API_BROADCAST)); 
} 

接收我的onDestroy方法

@Override 
protected void onPause() { 
    super.onPause(); 

    LocalBroadcastManager.getInstance(this).unregisterReceiver(mApiBroadcastReceiver); 
} 

和我的服务方法,发送广播

private void sendMessage(Object answer) { 
    Intent intent = new Intent(API_BROADCAST); 
    if (answer instanceof String) { 
     intent.setAction("register"); 
     Log.d("tag", answer.toString()); 
     intent.putExtra(EXTRA_ANSWER, answer.toString()); 

    } else if (answer instanceof User) { 
     intent.setAction("authorize"); 
     intent.putExtra(EXTRA_USER, (User) answer); 
    } 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 

回答

2

你不应该调用intent.setAction()

你用实际行动ApiService.API_BROADCAST监听意图:

  • 注册时,您可以使用new IntentFilter(ApiService.API_BROADCAST);
  • 播放时,使用new Intent(ApiService.API_BROADCAST);

这是好的,但如果您稍后致电intent.setAction("register"),则表示您重写了您设置的第一个操作。

相反,尝试通过子操作字符串作为Extra

private void sendMessage(Object answer) { 
    Intent intent = new Intent(API_BROADCAST); 
    if (answer instanceof String) { 
     intent.putExtra(EXTRA_WHAT, "register"); 
     intent.putExtra(EXTRA_ANSWER, answer.toString()); 

    } else if (answer instanceof User) { 
     intent.putExtra(EXTRA_WHAT, "authorize"); 
     intent.putExtra(EXTRA_USER, (User) answer); 
    } 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 
+0

哦,谢谢!有用) –

相关问题