Вы можете видеть в документах 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
.
проверить разрешение вручную в настройках! –
duplicate: http://stackoverflow.com/questions/32151603/scan-results-available-action-return-empty-list-in-android-6-0 – mfruizs2
Как вы считаете это дубликат с этим вопросом? Я уже упомянул: «Но в Android 6.0.1, телефоне Nexus, он работает очень хорошо». Проблема в том, что в 6.0.1 некоторые устройства возвращают действительные результаты сканирования, а некоторые возвращают 0. Кроме того, я упоминал, что включение GPS работает, но мне не интересно это делать. @ mfruizs2 –