我知道服务和类似的东西正在受到限制,所以我的接收器在Android Oreo上停止工作。
以下是启动服务的代码 -
Intent intent = new Intent(this, MyService.class);
intent.putExtra("Time", locationUpdatesTime);
intent.putExtra("Dist", locationUpdatesDistance);
startService(intent);
我在我的服务中有这个问题 -
Intent intent = new Intent();
intent.setAction("com.androidandyuk.laptimerbuddy");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.putExtra("Lat", thisLat);
intent.putExtra("Lon", thisLon);
sendBroadcast(intent);
但我的接收器从未被调用。经过搜索,我认为我必须注册我的接收器,但我不知道如何使用正确的语法编写代码。有人能帮忙吗?
如果您想给我投反对票,我会很感激您能在评论中说明原因,这样我就可以学习了。我已经寻找答案,但没有找到/理解它,并且我认为我已经清楚地表达了问题。
非常感谢!
更新尝试使用LocalBroadcastManager。
在MainActivity中,我有 -
BroadcastReceiver mMessageReceiver;
在onCreate中,我有以下操作-
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.i("receiver", "Got message: " + message);
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
在我的服务中,onLocationChanged。
Log.i("sender", "Broadcasting message");
Intent intent = new Intent();
intent.setAction("custom-event-name");
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
我看到了发送者的消息,说明这段代码是有效的。
那么我做错了什么呢?
Context
上的sendBroadcast()
和registerReceiver()
)。相反,使用LocalBroadcastManager
。这不仅可以让您通过 Android 8.0 中的更改,而且还可以提高速度和安全性。但是,正如 Code-Apprentice 建议的那样,请显示您如何注册此接收器。 - CommonsWareService
是一个Context
。请注意,LocalBroadcastManager
不能跨进程工作。如果您的Service
在单独的进程中运行 - 即,在清单文件的<service>
元素上具有process
属性 - 那么它将无法工作。CommonsWare在上面提到了这一点,但您可能错过了。 - Mike M.