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

}
Другие вопросы по тегам