wake-up-neo.com

Wie löse ich den Broadcast-Empfänger aus, wenn GPS ein- oder ausgeschaltet ist

public class BootReceiver extends BroadcastReceiver  {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().matches("Android.location.PROVIDERS_CHANGED")) {
            Toast.makeText(context, "in Android.location.PROVIDERS_CHANGED",
                Toast.LENGTH_SHORT).show();
            Intent pushIntent = new Intent(context, LocalService.class);
            context.startService(pushIntent);
        } else {
            Toast.makeText(context, "not in Android.location.PROVIDERS_CHANGED",
                Toast.LENGTH_SHORT).show();
            Intent pushIntent = new Intent(context, LocalService.class);
            context.startService(pushIntent);
        }
    }

    @Override
    public void onLocationChanged(Location arg0) {

    }
}

In meiner App muss ich den Broadcast-Empfänger auslösen, wenn GPS ein-/ausgeschaltet ist. schauen Sie sich die Sache an und schlagen Sie am besten vor, sie in der App umzusetzen.

35
Teekam

Dies ist nützlich, wenn der Benutzer eine Aktion auslösen möchte, die sich an der Ein/Aus-Position befindet

Sie sollten diese Aktion im Manifest hinzufügen

<action Android:name="Android.location.PROVIDERS_CHANGED" />

und nachdem Sie diese Aktion hinzugefügt haben, können Sie Ihren Broadcast-Empfänger auslösen 

<receiver Android:name=".GpsLocationReceiver">
    <intent-filter>
        <action Android:name="Android.location.PROVIDERS_CHANGED" />
        <category Android:name="Android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

In Ihrer BroadcastReceiver-Klasse müssen Sie LocationListener in dieser Klasse implementieren, die im Folgenden angegeben ist.

public class GpsLocationReceiver extends BroadcastReceiver {        
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().matches("Android.location.PROVIDERS_CHANGED")) {
            Toast.makeText(context, "in Android.location.PROVIDERS_CHANGED",
            Toast.LENGTH_SHORT).show();
            Intent pushIntent = new Intent(context, LocalService.class);
            context.startService(pushIntent);
        }
    }
}
68
Deepak Gupta

Ich möchte @Deepak Guptaanswer . Hinzufügen. Ich möchte Code hinzufügen, um einen dynamischen brodacsast-Empfänger in Ihrem fragment oder activity zu registrieren, wenn sich der GPS-Status ändert .

Registrieren Sie Ihren Rundfunkempfänger wie unten in Ihrer Aktivität oder Ihrem Fragment. 

private BroadcastReceiver gpsReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
            //Do your stuff on GPS status change
        }
    }
};

Für fragment:

getContext().registerReceiver(gpsReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));

Für Aktivität:

registerReceiver(gpsReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));

Dies kann überall dort verwendet werden, wo Sie Zugriff auf einen Kontext haben, nicht nur innerhalb einer Aktivität oder eines Fragments. Ich hoffe es hilft.

27
pRaNaY

Sie können diesen Code ausprobieren, da der Benutzer @DanielNugent darauf hingewiesen hat:

    ContentResolver contentResolver = getContext().getContentResolver();
    // Find out what the settings say about which providers are enabled
    int mode = Settings.Secure.getInt(
            contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);

    if (mode != Settings.Secure.LOCATION_MODE_OFF) {
      if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
        locationMode = "High accuracy. Uses GPS, Wi-Fi, and mobile networks to determine location";
      } else if (mode == Settings.Secure.LOCATION_MODE_SENSORS_ONLY) {
          locationMode = "Device only. Uses GPS to determine location";
      } else if (mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) {
          locationMode = "Battery saving. Uses Wi-Fi and mobile networks to determine location";
      }
    }
13
IgorGanapolsky

Arbeitslösung nach Android-Standortmodi in Android eingeführt

Wir können den Standortmodus auf genauere Angaben überprüfen

private boolean isGpsEnabled(Context context) {
            ContentResolver contentResolver = getContext().getContentResolver();
            // Find out what the settings say about which providers are enabled
            //  String locationMode = "Settings.Secure.LOCATION_MODE_OFF";
            int mode = Settings.Secure.getInt(
                    contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
            if (mode != Settings.Secure.LOCATION_MODE_OFF) {
                return true;
               /* if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
                    locationMode = "High accuracy. Uses GPS, Wi-Fi, and mobile networks to determine location";
                } else if (mode == Settings.Secure.LOCATION_MODE_SENSORS_ONLY) {
                    locationMode = "Device only. Uses GPS to determine location";
                } else if (mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) {
                    locationMode = "Battery saving. Uses Wi-Fi and mobile networks to determine location";
                }*/
            } else {
                return false;
            }
        }
0
Vinayak