Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Pie和WiFiManger.getScanResults()返回空列表,或者Android Oreo WiFiManger.startScan()返回false_Android_Android Wifi_Android 9.0 Pie - Fatal编程技术网

Android Pie和WiFiManger.getScanResults()返回空列表,或者Android Oreo WiFiManger.startScan()返回false

Android Pie和WiFiManger.getScanResults()返回空列表,或者Android Oreo WiFiManger.startScan()返回false,android,android-wifi,android-9.0-pie,Android,Android Wifi,Android 9.0 Pie,考虑以下原始示例: 以及manifest.xml文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:tools="http://schemas.android.com/tools" package="it.resis.wifiscan" xmlns:android="http://schemas.android.com/apk/res/android"> &

考虑以下原始示例:

以及manifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools"
          package="it.resis.wifiscan"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION "/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
返回flase

如果我在诺基亚6-Android Oreo 8.1.0 Api 27上运行它

wifiManager.startScan()
返回true,但

wifiManager.startScan()
wifiManager.getScanResults();
返回并清空列表。


我不明白,我快疯了。

从Android 6开始,访问Wi-Fi或蓝牙的扫描结果需要您按住
访问粗略位置
访问精细位置
。我看到您已经在清单中声明了
ACCESS\u rough\u LOCATION
,但是您还需要修改
活动
,以便在Android 6.0及更高版本的运行时请求该权限。例如:

private static final String RC_LOCATION = 1;

@Override
protected void onResume() {
    super.onResume();

    String location = android.Manifest.permission.ACCESS_COARSE_LOCATION;
    if (ActivityCompat.checkSelfPermission(this, location) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(new String[] { locationPermission }, RC_LOCATION);
    } else {
        startWifiScan();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
    if (requestCode == RC_LOCATION) {
        if (results[0] == PackageManager.PERMISSION_GRANTED) {
            startWifiScan();
        } else {
            // user rejected permission request
        }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, results);
    }
}

private void startWifiScan() {
    // do wi-fi scanning
}

是的,我的朋友,我完全忘了这一步。真可惜!另一个问题是:如果compileSdkVersion和targetSdkVersion都是21,我是否需要担心新的startScan()/getScanResults()限制?是的,如果您运行的是Android 6.0,您将始终必须执行此步骤。这是一个安全限制,不是根据你的构建而改变的。哦,天哪!你知道,要管理新的权限,从api 21提升到Android 6 api需要在我项目的不同部分做大量工作。你确认了吗?是的,很有可能。此表中列出的任何权限:将要求您添加逻辑以在运行时请求用户权限。
wifiManager.getScanResults();
private static final String RC_LOCATION = 1;

@Override
protected void onResume() {
    super.onResume();

    String location = android.Manifest.permission.ACCESS_COARSE_LOCATION;
    if (ActivityCompat.checkSelfPermission(this, location) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(new String[] { locationPermission }, RC_LOCATION);
    } else {
        startWifiScan();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
    if (requestCode == RC_LOCATION) {
        if (results[0] == PackageManager.PERMISSION_GRANTED) {
            startWifiScan();
        } else {
            // user rejected permission request
        }
    } else {
        super.onRequestPermissionsResult(requestCode, permissions, results);
    }
}

private void startWifiScan() {
    // do wi-fi scanning
}