2 回答
TA贡献2037条经验 获得超6个赞
Wi-Fi 权限
安卓 8.0 和安卓 8.1:
成功调用 WifiManager.getScanResults() 需要以下任一权限:
• ACCESS_FINE_LOCATION • ACCESS_COARSE_LOCATION • CHANGE_WIFI_STATE
如果调用应用程序没有任何这些权限,则调用将失败并出现 SecurityException。
安卓 9:
成功调用 WifiManager.startScan() 需要满足以下所有条件:
• 您的应用具有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限。• 您的应用拥有 CHANGE_WIFI_STATE 权限。• 设备上启用了定位服务(在设置 > 位置下)。
Android 10(API 级别 29)及更高版本:
成功调用 WifiManager.startScan() 需要满足以下所有条件:
• 如果您的应用面向Android 10(API 级别29)SDK 或更高版本,则您的应用拥有ACCESS_FINE_LOCATION 权限。
• 如果您的应用面向低于 Android 10(API 级别 29)的 SDK,则您的应用具有 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限。
• 您的应用拥有 CHANGE_WIFI_STATE 权限。
• 设备上启用了定位服务(在设置 > 位置下)。
并请求用户级别的权限来实现
有关更多信息,请参阅此链接:https ://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-permissions
XAMARIN 表单代码更改:
如果(Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O){
状态 = 等待 CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
如果(状态!= PermissionStatus.Granted)
{
var 结果 = 等待 CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Location });
状态=结果[权限.位置];
}
}
TA贡献1868条经验 获得超4个赞
你有没有试过检查是否getSupplicantState()是COMPLETED?
if(wifiInfo.getSupplicantState() == SupplicantState.COMPLETED){
String ssid = wifiInfo.getSSID();
wifiSSID.setText(ssid);
}
另外,您在运行之前BroadcastReceiver或什至在内部都可以做到这一点:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION);
}else{setWifiIndicator();
添加回答
举报