wifiManager.getScanResults()在Android 6.0.1,Samsung S5中返回0

时间:2016-09-20 06:09:42

标签: android wifimanager

在Android 6.0.1中,三星S5,WifiManager.getScanResults()返回0.但是,在Android 6.0.1,Nexus手机中,它的效果非常好。如果我打开Samsung S5上的GPS,它也可以运行并返回有效的扫描结果列表。

但是,我认为,打开GPS并不是一个好主意。所以,我想知道使用getScanResults获取扫描结果的正确方法。

N.B。我按开发者网站上的说明授予ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限。

1 个答案:

答案 0 :(得分:3)

您可以在google docs上看到,从Android 6.0开始,权限行为已更改为运行时。要使用需要权限的功能,应先检查先前是否已授予权限。使用checkSelfPermission(permissionString) method会返回一个结果,其权限为PERMISSION_GRANTEDPERMISSION_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();
     }
 }

之后,您可以使用LocationServices.SettingsApi检查位置服务是否为ON,并请求用户启用此选项是否已禁用。这可以通过Play服务LocationSettingsStatusCodes.RESOLUTION_REQUIRED回调来实现。