2016-08-01 3 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 включен. Благодарим вас за ведущего Prerak, я буду искать, как это сделать, и обновить вопрос или ввести ответ самостоятельно. – wilkas

+2

Если в вашем файле build.gradle вы используете targetSdkVersion, то 23, чем вы должны использовать разрешения во время выполнения. Если targetSdkVersion меньше 23, все должно работать – Beyka

ответ

2

Существует два способа решения этой проблемы.

1) Можно было обновить значение targetSdkVersion до уровня ниже 23 в файле "build.gradle". Благодаря Beyka.

2) Поскольку «опасные» разрешения Android 6.0 должны не только включаться в файл манифеста, но также запрашиваться подтверждение во время работы приложения (запрос разрешений во время выполнения). Поставщика местоположения следует запрашивать только после получения разрешения пользователя во время выполнения. Благодаря Prerak Sola.

Это большие ресурсы и примеры, как это сделать:

Смежные вопросы