我有一个Activity
,我正在其中本地注册一个BroadcastReceiver
,如下所示:
public class SomeActivity extends Activity{
public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_activity_layout);
.....
.....
IntentFilter filter = new IntentFilter();
filter.addAction(PERFORM_SOME_ACTION);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// perform some action ...
}
};
registerReceiver(receiver, filter);
}
.....
.....
}
我有一个Service
,我通过以下方式发送一个Intent
:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
sendBroadcast(i); /* Send global broadcast. */
return START_STICKY;
}
这个可以正常工作。在实施后,我意识到对于这种情况,本地广播可能更合适:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
LocalBroadcastManager.getInstance(this).sendBroadcast(i); /* Send local broadcast. */
return START_STICKY;
}
不幸的是,上述方案无法正常工作。每次都会发送全局广播,而似乎从未发送/接收本地广播。
我在这里漏掉了什么?难道本地广播不能在两个不同的应用组件之间发送,比如两个单独的 Activity
或从 Service
发送到 Activity
吗?我做错了什么?
注意:
根据文档,每当我们不需要广播传播到应用程序之外时,发送本地广播(范围限制为应用程序自身组件的 应用内部 广播)比发送全局广播(传输到手机上的每个应用程序的 应用间 广播)更有效率且更加精确。这就是进行上述更改的原因。
LocalBroadcastManager.getInstance(this).sendBroadcast(i);
ن¹‹ه¤–,و‚¨è؟ک需è¦پن½؟用LocalBroadcastManager.getInstance(this).registerReceiver();
م€‚ - ShaishavsetData(myUri)
。此外,值得检查一下您正在使用的上下文对象来注册接收器/发送广播意图。 - ban-geoengineeringsetData(myUri)
实际上是我的问题之前,这是我考虑的可能性之一 - 所以我没有进一步探索这个想法。但你应该能够通过在两侧使用getApplicationContext()
(或其他)轻松检查。 (我只是想提出来,以防有可能帮助其他人。) - ban-geoengineering