2016-11-24 6 views
0

Ich habe einen Fehler, wenn ich versuche, in Android letzten bekannten Ort zu bekommen 6,0Android 6.0 getLastKnowLocationPermission

Location lastLocation =locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

Fehler:

java.lang.SecurityException: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.

Mein Manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 

Check Berechtigungen:

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

     if (ActivityCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 
      try { 
       ActivityCompat.requestPermissions(getActivity(), new String[] { 
           Manifest.permission.ACCESS_FINE_LOCATION, 
           Manifest.permission.ACCESS_COARSE_LOCATION }, 
         1); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     PointDTO point = new PointDTO(); 

     try { 
      Location lastLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
//   addresses = geocoder.getFromLocation(lat, lon, 1); 
//   //  String cityName = addresses.get(0).getAddressLine(0); 
//   //  String countryName = addresses.get(0).getAddressLine(2); 
//   address= addresses.get(0).getAddressLine(0); 
      point.setLat(lastLocation.getLatitude()); 
      point.setLon(lastLocation.getLongitude()); 

     } catch (NullPointerException | SecurityException e) { 
      e.printStackTrace(); 
     } 

     return point; 

Was ich falsch gemacht habe? Es funktioniert in Android Api 23-

UPD:

NPE:

ActivityCompat.requestPermissions(getActivity(), new String[] { 
          Manifest.permission.ACCESS_FINE_LOCATION, 
          Manifest.permission.ACCESS_COARSE_LOCATION }, 
        1); 

Security

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

überprüfen Sie bitte, ob Sie Ausnahme –

+0

bekommen sind glaube ich Ihnen nicht einmal die letzte bekannte Position, ohne den Benutzer Zuschuss erhalten können Sie zu den Orten Zugriff –

+0

@MohammadAbbas Ich versuche es mit Anforderung von Berechtigungen zu erhalten, und Manifest hat diese Erlaubnis. Wie geht es dann in diesem Fall? –

Antwort

1

Sie sollten Lage Arbeit tun, wenn Laufzeit Standort Berechtigungen für Eibisch (android api 23 oder höher) gegeben sind, dies überprüfen:

Diese Codezeile

Location lastLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

hier zeigen Ihnen Fehler im Code für securi ty exception und fragen Sie, ob Sie den Code für die Laufzeitberechtigung überall für den Code verwenden möchten. Sie müssen sich keine Sorgen machen, dass Sie den Build mit dieser Fehlerinfo ausführen können.

private void checkRuntimePermissions(){ 
     if (ActivityCompat.checkSelfPermission(context, 
       Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 
      try { 
       ActivityCompat.requestPermissions(getActivity(), new String[] { 
           Manifest.permission.ACCESS_FINE_LOCATION, 
           Manifest.permission.ACCESS_COARSE_LOCATION }, 
         1); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }else{ 
      getMyLocation(); 
     } 
    } 

    private PointDTO getMyLocation(){ 
     PointDTO point = new PointDTO(); 
     try { 
      LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
      Location lastLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
//   addresses = geocoder.getFromLocation(lat, lon, 1); 
//   //  String cityName = addresses.get(0).getAddressLine(0); 
//   //  String countryName = addresses.get(0).getAddressLine(2); 
//   address= addresses.get(0).getAddressLine(0); 
      point.setLat(lastLocation.getLatitude()); 
      point.setLon(lastLocation.getLongitude()); 

     } catch (NullPointerException | SecurityException e) { 
      e.printStackTrace(); 
     } 

     return point; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case REQ_ACCESS_COARSE_LOCATION: 
      case REQ_ACCESS_FINE_LOCATION: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // permission was granted, yay! 
        checkRuntimePermissions(); 
       } else { 
        //do other operation because permission not given 
       } 
       return; 
      } 
     } 
    } 
+0

danke! Es funktioniert gut) –

1

Ich hatte alos das gleiche Problem, während diese zu tun. Sie sollten auf den Standort zugreifen, nachdem Sie den Pe erteilt haben rmission

es innerhalb Methode onRequestPermissionsResult()

beziehen Anfrage Erlaubnis sollte blog

+0

Ok, danke. Ich werde es versuchen und informieren Sie über die Ergebnisse –

+0

bitte versuchen, ich werde warten –

+0

danke! es ist Arbeit. –

Verwandte Themen