WifiP2pManager.discoverPeers не работает в Android 10
Следующий образец кода возвращает код ошибки: 0, который является кодом внутренней ошибки в android. Есть ли обходной путь, который может позволить обнаруживать одноранговые узлы на устройствах Android 10?
wifip2pmanager.discoverPeers(wifip2pmanagerChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
status.setText("Peer Discovery Started");
}
@Override
public void onFailure(int reason) {
status.setText("Error code:" + reason);
}
});
3 ответа
Точно так же случилось и со мной ...
ACCESS_FINE_LOCATION
а также
ACCESS_COARSE_LOCATION
недостаточно. Пользователь должен отдельно активировать службы определения местоположения! (в моем случае включение местоположения решило проблему ...)
Это означает: либо вы активируете местоположение в настройках вручную, либо отправляете пользователю удобный запрос на активацию служб определения местоположения (похоже на окно запроса разрешения; см. Карты Google)
См. Этот вопрос, например, код последнего. Надеюсь это поможет!
Изменить: если вы ищете anwser, который не включает какие-либо библиотеки Google, см. Ответ на этот вопрос .
В дополнение к заявлению в списке вам также необходимо динамически подавать заявку на это разрешение.
Сегодня я столкнулся с проблемой при использовании Android 33, решил ее, добавивACCESS_FINE_LOCATION
иNEARBY_WIFI_DEVICES
. Чтобы запросить разрешения приложения: когда действие onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
...
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.NEARBY_WIFI_DEVICES,
}, 0);
...
}
Чтобы проверить предоставленные или запрещенные разрешения:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0) {
for(int i = 0; i < permissions.length; i++){
if(grantResults[i] == PackageManager.PERMISSION_GRANTED){
Log.d("MainActivity", "Permission " + permissions[i] + " granted");
}else{
Log.d("MainActivity", "Permission " + permissions[i] + " denied");
}
}
}
}