由于以下原因,处理GeoFence的应用需要接收PROVIDERS_CHANGED
广播
所以我的应用程序一直在清单中注册其广播接收器。但由于PROVIDERS_CHANGED
并不是我们可以像以前那样使用的软件,因此它在Android Oreo中不再起作用。
我可以在应用程序的活动或服务中注册广播接收器,但它迟早会退出(终止其生命周期),然后我需要注销它。我的应用程序开始通过诸如GeoFence过渡之类的事件开始工作,但是接收PROVIDERS_CHANGED
对于使其工作至关重要。
我验证了PROVIDERS_CHANGED
不能被注册在Android Oreo清单中的接收者接收。有什么解决办法吗?
答案 0 :(得分:0)
@Tomcat和@ Virat18-我遇到了一个解决方案,您不再可以在清单中注册广播接收器,以在Android-OREO中接收PROVIDERS_CHANGED
操作Intent过滤器。 br />
解决方案?只需动态(从代码内)而不是从清单中注册BroadcastReceiver
即可。此外,不要检查硬编码的正则表达式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。即使用户离开您的活动(按下后退按钮,主页按钮等),它仍将继续从后台接收广播。但是,如果用户从“多任务”按钮关闭了您的应用程序,它将不再接收,因此请注意。