gpt4 book ai didi

Android 6.0 错误?有权限但 getScanResults() 在 Android 6.0 中仍然返回空列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:44 27 4
gpt4 key购买 nike

我已经在 android 6.0 版本 - Marshmallow 中申请了权限,但是在使用 getScanResults() 时它仍然返回空列表。

 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方法中,我得到了ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION的权限,但是还是无法扫描结果

@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;
}
}

这是android M的bug吗?

最佳答案

申请权限后仍需开启WIFI。所以简而言之,您必须按顺序执行此操作以扫描周边:

  1. 请求必要的权限(ACCESS_WIFI_STATE、CHANGE_WIFI_STATE、ACCESS_COARSE_LOCATION)。此外,如您所述,在 MM 上,您需要在运行时提出请求。
  2. 使用 WifiManager#setWifiEnabled(true) 启用 WIFI;
  3. 不必以我知道的方式以编程方式启用位置访问。 但请阅读下面的注释
  4. 您必须为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个 BrodcastReceiver。这是您获得扫描已准备就绪的信号的地方。无论您是通过 AndroidManifest 注册还是在运行时动态注册,只要在下一步之前完成即可。
  5. 您必须使用 WifiManager#startScan() 才能为网络扫描请求恰好一个 更新。如果您想要更多,请设置一个计时器/timertask(推荐)或在您收到前一个(可能永远不会来)时重新安排时间
  6. 只有在 BroadcastReceiver onReceive 上,您才能调用 WifiManager#getScanResults() 并获得合理的结果

注意:在某些手机上(Moto X 2014),我注意到您需要启用基本位置才能获得任何结果,似乎只有用户(系统用户界面)才能触发/离开。如果用户的位置完全关闭,我似乎无法获得非空结果列表,即使系统 UI 可以。这可能是由于 Marshmallow 需要在用户应用程序中找到用于蓝牙和 WiFi 扫描的位置,以及摩托罗拉的错误实现,或者已在最新的 Marshmallow 错误跟踪器中修复但未在摩托罗拉最新的 OTA 中修复的缺陷,因为这不会发生在Nexus 5 或 Galaxy S6。

关于Android 6.0 错误?有权限但 getScanResults() 在 Android 6.0 中仍然返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com