2016-08-01 19 views
1

Ich versuche, Gerät (Nexus 5x) Speicherort zu erhalten, indem Sie ein Tutorial folgen. Aber es funktioniert nicht und ich fand heraus, dass die LinieWarum gibt locationManager.getBestProvider() null zurück? (Nexus 5x)

locationManager.getBestProvider(new Criteria(), false); 

immer Null zurückgibt.

Hier ist mein manifesten Inhalt:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="lt.wilkas.locationdemo"> 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Hier mein onCreate Inhalt ist:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //initialize location manager 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     //get best provider 
     provider = locationManager.getBestProvider(new Criteria(), false); 

     if (provider == null) { 
      Log.i("i", "provider ir null"); 
     } else { 
      Log.i("i", provider); 
     } 
} 

Was bin ich nicht richtig zu tun?

+1

Sie benötigen Laufzeitberechtigungen für Android 6.0 und höher zu implementieren. –

+0

Ja, GPS ist eingeschaltet. Danke für die Führung von Prerak, ich werde nachsehen, wie das geht und werde die Frage aktualisieren oder die Antwort selbst eingeben. – wilkas

+2

Wenn Sie in Ihrer build.gradle-Datei targetSdkVersion 23 verwenden, sollten Sie Laufzeitberechtigungen verwenden. Wenn targetSdkVersion kleiner als 23 ist, sollten alle funktionieren. – Beyka

Antwort

2

Es gibt zwei Möglichkeiten, dieses Problem zu lösen.

1) Man könnte den Wert von targetSdkVersion auf unter 23 in einer Datei "build.gradle" aktualisieren. Danke an Beyka.

2) Da Android 6.0 "gefährliche" Berechtigungen sollten nicht nur in der Manifest-Datei enthalten sein, sondern auch um Bestätigung gefragt, während App läuft (Requests Permissions zur Laufzeit). Der Standortanbieter sollte nur nach dem Abrufen der Laufzeitberechtigung vom Benutzer gefragt werden. Danke an Prerak Sola.

Dies sind große Ressourcen und Beispiele, wie das tun: