Как получить события включения-выключения GPS в Android?

У меня есть простой широковещательный приемник, который получает включение/выключение GPS. Когда я включаю GPS и получаю Improve accuracy dialog? (начал появляться в Android 8.0), предоставляемый платформой Android, я дважды получаю приемник android.location.PROVIDERS_CHANGED.

Ниже мой образец приемника.

public class LocationServicesChangedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG,"Intent action is "+intent.getExtras());

}

Я объявил это в манифесте следующим образом

<receiver
      android:name=".geofence.core.LocationServicesChangedReceiver"
      android:exported="false">
      <intent-filter>
           <action android:name="android.location.PROVIDERS_CHANGED" />
       </intent-filter>
</receiver>

Вопрос:

  • Есть ли способ перестать получать несколько onReceive()
  • Есть ли какие-либо другие намерения, чтобы получить событие включения / выключения GPS.

person Rohit    schedule 20.09.2018    source источник


Ответы (1)


Есть ли способ перестать получать несколько onReceive():

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().matches("android.location.PROVIDERS_CHANGED"))
    {
        Log.i(TAG, "Location Providers changed");

        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

        isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        //You receive multiple data from more than one Provider, 
        // choose which one you want to use (GPS or NETWORK Provier).

        if (isGpsEnabled) {
            Log.i(TAG, "Location Providers is GPS");
            // put your code in here to get data from GPS PROVIDER.
        }
        else if (isNetworkEnabled) {
            Log.i(TAG, "Location Providers is Network");
            // put your code in here to get data from NETWORK PROVIDER.
        }

    }
}
person mbsysd    schedule 21.09.2018
comment
Но эта часть не будет работать, когда ваше приложение будет убито. Мое требование состоит в том, что даже если мое приложение находится на переднем плане/фоне/убито, когда пользователь включает GPS, я должен выполнить определенные действия. Код, который вы дали, не будет работать, когда приложение будет убито. - person Rohit; 21.09.2018
comment
если вы хотите, чтобы приложение работало непрерывно в фоновом потоке, запустите функцию в службе. - person mbsysd; 21.09.2018
comment
Для того же у нас есть приемники... Пожалуйста, прочитайте и поймите проблему. Службы определения местоположения — это то, что управляется ОС. Нам не нужно создавать отдельный поток для непрерывной работы. - person Rohit; 21.09.2018