@ Tomcat и @ Virat18 - я натолкнулся на решение о том, что вы больше не можете регистрировать широковещательный приемник в своем манифесте, чтобы получать фильтр действий Intent PROVIDERS_CHANGED
в Android-OREO ..
Решение? Просто зарегистрируйте ваш 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. Он будет продолжать получать трансляцию из фона, даже когда пользователь покидает вашу активность (нажимает кнопку «назад», кнопку «домой» и т. Д.). Однако, если пользователь закрывает ваше приложение с помощью кнопки многозадачности, оно больше не будет получить, так что примите это к сведению.