首页 新闻 会员 周边 捐助

Android 6.0 bug ? 在6.0里已经有权限了但是 getScanResults() 仍然获取不到wifi列表

0
悬赏园豆:20 [待解决问题]

在处理6.0 权限的时候,在activity的onResume中startScan后,在收到

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

广播后,首先去判断是否有权限,使用的代码如下:

private boolean checkPermission() {

    List<String> permissionsList = new ArrayList<String>();

    if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        permissionsList.add(Manifest.permission.ACCESS_FINE_LOCATION);
    }
    if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        permissionsList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
    }

    if (permissionsList.size() > 0) {
        ActivityCompat.requestPermissions((Activity) mContext, permissionsList.toArray(new String[permissionsList.size()]),
                REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
        return false;
    }
    return true;
}

同时复写onRequestPermissionsResult方法,在该方法中判断,如果已经获取到对应的权限后,就通过getScanResults() 获取一次wifi列表。onRequestPermissionsResult方法如下:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                       int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
            if (permissions.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED ||
                    (permissions.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED &&
                            grantResults[1] == PackageManager.PERMISSION_GRANTED)){
                List<ScanResult> scanResults = mWifi.getScanResults();
                //list is still empty
            }
             else {
                // Permission Denied
                Toast.makeText(mContext, getString(R.string.permission_deny), Toast.LENGTH_LONG).show();
            }
            break;
    }
}

onRequestPermissionsResult中通过debug已经看到已经有 Manifest.permission.ACCESS_FINE_LOCATION 和Manifest.permission.ACCESS_COARSE_LOCATION 权限了,但是获取到的wifi列表还是为空!!!!!

不知道这个是不是android M的一个bug?还是android M如果权限关闭后,就再也打不开?

shaotine的主页 shaotine | 初学一级 | 园豆:166
提问于:2015-12-15 21:27
< >
分享
所有回答(5)
0

可以将targetSdkVersion 设置为23以下,这样就不会使用运行时权限的方式 ,而是按照原先的权限方式管理

ldddon | 园豆:202 (菜鸟二级) | 2016-01-21 10:05
0

设置23以下  参考这个文章  http://www.cnblogs.com/51pansou/p/5165851.html

babys | 园豆:218 (菜鸟二级) | 2016-01-28 17:36

并没有文章

支持(0) 反对(0) AliasNeo | 园豆:200 (初学一级) | 2016-06-28 14:02
0

建议:

  首先确定问题所在,先将targetSdkVersion 版本设置为 23一下,然后获取wifi列表,看能否获取到wifi列表,如果能获取,说明是6.0权限的问题。如果获取不到,说明是获取wifi列表的那段代码有问题。

参考:http://timmy6.github.io/2016/03/15/requestPermission/

_启明 | 园豆:38 (初学一级) | 2016-03-23 09:56
0

一样的问题,已经解决了,参考的这个帖子,答案在帖子最后:http://blog.csdn.net/ccpat/article/details/51151863

phoenixshow | 园豆:202 (菜鸟二级) | 2017-02-08 21:38

请问你确定你看清题目了码?  题主说的是已经授予了位置权限  还是获取不到WiFi列表。

支持(0) 反对(0) 程星 | 园豆:200 (初学一级) | 2017-09-23 11:55
0

请问您解决了吗,我用的魅族X,安卓6.0.1的系统,相同的问题,有权限还是获取不到

figa2017 | 园豆:202 (菜鸟二级) | 2018-01-20 15:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册