-2

entfernt. Wenn Benutzer die Berechtigung erteilen, wird ein Hintergrunddienst erstellt, der die Verfolgung von Benutzerstandorten startet.Anwendung stürzt ab, wenn Benutzer Anwendungsgenehmigung aus der Einstellung

Der Hintergrunddienst verfolgt den Standort des Benutzers, selbst nachdem der Benutzer die Anwendung zerstört hat.

Aber wenn Benutzer auf Anwendungseinstellungen geht und Standort entfernen Erlaubnis dann abstürzt Service und gibt folgende Fehlermeldung,

java.lang.SecurityException: Kunde muss ACCESS_COARSE_LOCATION oder ACCESS_FINE_LOCATION Erlaubnis irgendwelche Lage Operationen auszuführen.

Der Dienst wird nach jeweils 10 Sekunden, führen Sie mich freundlich, wie dieser Dienst in Laufen zu überprüfen, dass es entweder Berechtigungen hat oder nicht, denn nach alle 10 Sekunden den Dienst läuft und ruft onLocationChanged Methode.

public class UpdateService extends Service implements 
     LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 


    @Override 
    public void onCreate() { 
     super.onCreate(); 

     if (isGooglePlayServicesAvailable()) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(LocationServices.API) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 

      mGoogleApiClient.connect(); 
     } 
    } 



    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.i(TAG, "onStartCommand: "); 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(10000); 
     mLocationRequest.setFastestInterval(10000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 

     super.onStartCommand(intent, flags, startId); 
     return START_STICKY ; 
    }       


@Override 
    public void onLocationChanged(Location location) { 

    saveLocationand(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); 

}   

EDIT:

Dies ist, wie ich überprüfen Erlaubnis in Anwendungsstart:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this, 
       android.Manifest.permission.ACCESS_FINE_LOCATION); 
     if (permissionCheck == PackageManager.PERMISSION_GRANTED) { 
      if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
       showGPSDisabledAlertToUser(); 
      } 
      startService(new Intent(MainActivity.this, UpdateService.class)); 
     } else 
      checkLocationPermission(); 
    }  
+0

Es ist aber offensichtlich, wenn Sie 'location permission entfernen' als app nicht funktioniert. –

Antwort

1

Dies liegt daran, Location Erlaubnis als Dangerous Erlaubnis gekennzeichnet ist und daher erfordert es Runtime Erlaubnis.

Sie können meine Antwort hier überprüfen, um zu überprüfen, ob die Standortberechtigung aktiviert ist oder nicht, und fortzufahren.

What is the difference between shouldShowRequestPermissionRationale and requestPermissions?

Lesen Sie mehr bei

https://developer.android.com/training/permissions/requesting.html

Hier ist der Code, den ich in meinem Projekt verwende:

private void startLocationUpdates() { 

    if (!(mHasLocationPermission && mHasLocationSettings)) { 
     return; 
    } 
    try { 
     LocationServices.FusedLocationApi.requestLocationUpdates(
       mGoogleApiClient, 
       mLocationRequest, 
       this 
     ); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } 
} 

Sie können überprüfen, ob Sie immer noch diese Berechtigungen und Standorteinstellungen aktiviert oder nicht

+0

Danke für die Antwort, ich habe Ihren Standpunkt verstanden. Aber wie kann ich dies im laufenden Dienst überprüfen. Der Dienst wird ausgeführt, der Benutzerstandort wird nach jeweils 10 Sekunden abgerufen, dazwischen entfernt der Benutzer die Standortzulassungsrechte, er weiß nichts darüber und trifft erneut auf die LocationUpdate() -Methode und stürzt – Kirmani88

+0

ab. Überprüfen Sie die Änderungen. –

1

Verwenden Sie die API von Google Setting, um zu prüfen, ob die Standortberechtigung aktiviert wurde oder nicht.

Settings API docmentation

Sie können auch unten Code verwenden, um zu überprüfen, ob App erforderliche Berechtigung hat.

String permission = "**permission**"; 
int res = getContext().checkCallingOrSelfPermission(permission); 
return (res == PackageManager.PERMISSION_GRANTED); 
+0

Danke, aber wie kann ich es in laufenden Service überprüfen – Kirmani88

+0

Immer wenn die App gestartet wird, müssen Sie dies überprüfen. Überprüfen Sie die Dokumentation von SettingsApi. –

+0

Der Dienst ist abgestürzt, bevor der Benutzer die Anwendung gestartet hat.Nehmen wir an, der Benutzer installiert die Anwendung zum ersten Mal und erteilt die Standortberechtigung. Ein Hintergrunddienst wird gestartet. Der Benutzer schließt die Anwendung und wechselt zu den Einstellungen und entfernt die Standortberechtigung für diese App. Der Hintergrunddienst wird sofort abgestürzt sein. – Kirmani88

Verwandte Themen