2016-08-01 8 views
1

チュートリアルに従ってデバイス(Nexus 5x)の場所を取得しようとしています。しかし、それは動作していないと私は、その行を見つけたlocationManager.getBestProvider()がnullを返すのはなぜですか? (Nexus 5x)

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

は常にnullを返します。ここで

は私のマニフェストコンテンツである:ここでは

<?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> 

は私のonCreateコンテンツです:私は、右

@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); 
     } 
} 

何をしていないでしょうか?

+1

あなたは、Android 6.0と大きいため、実行時のアクセス権を実装する必要があります。 –

+0

はい、GPSはオンです。 Prera​​k先生、ありがとう、私はそれを行う方法を探し、質問を更新するか、自分で答えを入力します。 – wilkas

+2

build.gradleファイルでtargetSdkVersionを23に設定した場合は、ランタイム権限を使用するよりも23です。 targetSdkVersionが23未満の場合はすべて動作するはずです – Beyka

答えて

2

この問題を解決するには2通りの方法があります。

1) "build.gradle"ファイルのtargetSdkVersionの値を23未満に更新することができます。 Beykaに感謝します。

2)Android 6.0の「危険な」アクセス許可はマニフェストファイルに含めるだけでなく、アプリケーションの実行中に確認を求める(実行時に権限を要求する)ようにする必要があります。ロケーションプロバイダは、ユーザからランタイム許可を得た後にのみ尋ねられるべきです。 Prera​​k Solaに感謝します。

これらは、それを行うにはどのように偉大なリソースと例です:

関連する問題