2016-09-20 4 views
0

В Android 6.0.1 Samsung S5, WifiManager.getScanResults() возвращает 0. Но в Android 6.0.1, Nexus телефон, он работает очень хорошо. Если я включу GPS на Samsung S5, то он также работает и возвращает действительный список результатов сканирования.wifiManager.getScanResults() возвращает 0 в Android 6.0.1, Samsung S5

Но, я думаю, это не очень хорошая идея включить GPS. Итак, я хочу знать, как правильно использовать getScanResults для получения результатов сканирования.

N.B. Я дал ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION разрешение, как указано на сайте разработчика.

+0

проверить разрешение вручную в настройках! –

+0

duplicate: http://stackoverflow.com/questions/32151603/scan-results-available-action-return-empty-list-in-android-6-0 – mfruizs2

+1

Как вы считаете это дубликат с этим вопросом? Я уже упомянул: «Но в Android 6.0.1, телефоне Nexus, он работает очень хорошо». Проблема в том, что в 6.0.1 некоторые устройства возвращают действительные результаты сканирования, а некоторые возвращают 0. Кроме того, я упоминал, что включение GPS работает, но мне не интересно это делать. @ mfruizs2 –

ответ

1

Вы можете видеть в документах google, начиная с Android 6.0, поведение разрешений изменилось на время выполнения. Чтобы использовать функцию, требующую разрешения, сначала нужно проверить, разрешено ли разрешение. С использованием checkSelfPermission(permissionString)method результат возвращается, wither ther разрешение PERMISSION_GRANTED или PERMISSION_DENIED.

Если разрешение не предоставлено или оно впервые, необходимо сделать запрос на разрешение. Предоставление пользователю возможности предоставить или отклонить.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 
       PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION); 
    //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method 

}else{ 
    getScanningResults(); 
    //do something, permission was previously granted; or legacy device 
} 

Если ваш код запущен на устройстве до M, вы продолжаете использовать свой код, разрешение было предоставлено с использованием устаревшего метода.

После того, как запрошено разрешение, диалог будет показан пользователю. Его/ее ответ будет доставлен как:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     int[] grantResults) { 
    if (requestCode == PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     // Do something with granted permission 
     mWifiListener.getScanningResults(); 
    } 
} 

После этого, вы можете проверить, если Location Services включено, используя LocationServices.SettingsApi и просить пользователя включить, если эта опция отключена. Это возможно с помощью функции «Службы обслуживания» LocationSettingsStatusCodes.RESOLUTION_REQUIRED.