简体   繁体   English

如何在Android棉花糖上获取wifi扫描结果?

[英]How to get wifi scan result on android marshmallow?

I want get wifi scan result on my marshmallow device. 我想在棉花糖设备上获得wifi扫描结果。
First, my area have many wifi ap. 首先,我所在的地区有很多wifi AP。
If get wifi scan result on marshmallow device. 如果在棉花糖设备上获得wifi扫描结果。 add ACCESS_COARSE_LOCATION permission. 添加ACCESS_COARSE_LOCATION权限。

my source 我的来源

@Override
public void onClick(View v) { 

        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
            int permissionResult = checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);

            if (permissionResult == PackageManager.PERMISSION_DENIED) {

                if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_COARSE_LOCATION)) {
                    AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                    dialog.setTitle("need permission")
                            .setMessage("permission grant?")
                            .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1000);
                                    }
                                }
                            }).setNegativeButton("no", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "cancel", Toast.LENGTH_LONG).show();
                        }
                    }).create().show();

                } else {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1000);
                }
            } else {
                result = getScanWifiResult();
            }

    }
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == 1000) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                Log.d(TAG, "request permission");
                result = mUtils.getScanWifiResult();
            }
        } else {
            Toast.makeText(MainActivity.this, "permission denied", Toast.LENGTH_LONG).show();
        }
    }
}



public List<String> getScanWifiResult() {
    List<ScanResult> result;
    mWifiManager.startScan(); // service register
    result = mWifiManager.getScanResults();
    ArrayList<String> ssid = new ArrayList<String>();
    if (result != null) {
        for (ScanResult scan : result) {
             ssid.add(scan.SSID);
        }
    } 
    return ssid;
  }

With this source on marshmallow device or gradle targetSdkVersion above 23. wifi scan result null, but for gradle targetSdkVersion below 21 or kitkat device. 如果该源位于棉花糖设备或23之上的gradle targetSdkVersion ,则wifi扫描结果为空,但对于21之下的kitdle设备或grakat装置的gradle targetSdkVersion无效。
wifi scan result many wifi ap. wifi扫描结果很多wifi ap。

Why wifi scan result null on marshmallow device? 为什么wifi扫描结果在棉花糖设备上为空?

Because your calling it inside the else statement of the if(permission == denied) 因为您在if(permission == denied)else语句中调用它

Your result = getScanWifiResult() should be outside the permissions if-else statement. 您的result = getScanWifiResult()应该在权限if-else语句之外。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM