WifiP2pManager.discoverPeers 在 android 10 中失败

问题描述 投票:0回答:3

以下代码示例返回错误代码: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);
                }
            });
android android-10.0 wifip2p peer-discovery
3个回答
8
投票

同样的事情也发生在我身上...

ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
还不够。用户必须明确激活定位服务! (就我而言,打开位置解决了问题......)

这意味着:您可以在设置中手动激活位置,或者向用户发出可用性友好的请求以激活位置服务(看起来类似于权限请求窗口;请参阅谷歌地图)

请参阅这个问题了解后者的示例代码。希望这有帮助!

编辑:如果您搜索不涉及任何 Google 库的答案,请参阅此问题的答案。


2
投票

除了列表中的声明外,还需要动态申请该权限。


0
投票

我今天在使用android 33时遇到了这个问题,通过添加

ACCESS_FINE_LOCATION
NEARBY_WIFI_DEVICES
解决了它。请求应用程序权限:当 Activity 处于 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");
            }
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.