应用程序处理GeoFence需要接收PROVIDERS_CHANGED
广播,因为:
所以我的应用程序一直在清单中注册其广播接收器。但它在Android Oreo中不再起作用,因为PROVIDERS_CHANGED
不是我们可以像以前一样工作的那个。
我可以在应用程序的活动或服务中注册广播接收器,但它迟早会退出(结束其生命周期),然后我需要取消注册它。我的应用程序开始通过GeoFence转换等一些事件开始工作,但接收PROVIDERS_CHANGED
对于使其工作至关重要。
我验证PROVIDERS_CHANGED
不能被在Android Oreo中的清单中注册的接收者接收。它有什么解决方案吗?
@Tomcat和@ Virat18 - 我遇到了一个解决方案,你不能再在你的清单中注册一个广播接收器来接收Android-OREO中的PROVIDERS_CHANGED
动作意图过滤器。
解决方案?只需动态注册你的BroadcastReceiver
(从你的代码中),而不是从Manifest注册。而且,你应该使用android.location.PROVIDERS_CHANGED
(当然导入LocationManager.PROVIDERS_CHANGED_ACTION
),而不是检查硬编码的正则表达式LocationManager
。
以下是我用来实现此功能的代码示例! (例如:从按钮单击):
public void buttonClick(View view) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.location.PROVIDERS_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
Log.i(TAG, "Action MATCHES LocationManager.PROVIDERS_CHANGED_ACTION!");
}
}
};
this.getApplicationContext().registerReceiver(receiver, filter);
Log.i(TAG, "RECEIVER HAS BEEN REGISTERED");
}
另外,不要忘记在代码中正确注销接收器。 如果您认为这是一个很好的解决方案,请接受它作为答案。 快乐的编码! PS。这将继续从后台接收广播,即使用户离开您的活动(按下后退按钮,主页按钮等)。但是,如果用户从多任务按钮关闭您的应用程序,它将不再收到,所以请注意。