当前位置: 首页 > 知识库问答 >
问题:

Android 6.0中的SCAN_RESULTS_AVAILABLE_ACTION返回空列表

邢星波
2023-03-14

昨天我的Nexus5收到了从Android MNC6.0-marshmallow版本的更新。此后,扫描设备中可用网络的动作停止接收列表,在这种情况下,结果列表的大小为0,即使在Wifi系统设置中列出了10+个Wifi网络。

这方面的代码通常是:注册scan_results_available_action并在接收器中等待事件,如下所示:

// Register the Receiver in some part os fragment...
getActivity().registerReceiver(wifiListener, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();

// Inside the receiver:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> results = wifiManager.getScanResults();
// the result.size() is 0 after update to Android v6.0, same code working in older devices.

我在API的变化主题中搜索了关于这个的内容,但是我没有看到这个功能有什么突破性的变化。

有人注意到了吗?是API中的新内容还是仅有的个别情况?

共有1个答案

宋丰
2023-03-14

从Android6.0开始,权限行为已经改为运行时。若要使用需要权限的功能,应首先检查权限是否是先前授予的。使用CheckSelfPermission(permissionString)方法返回结果,则权限为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检查位置服务是否打开,并请求用户在禁用此选项时启用。使用Play ServicesLocationSettingsStatusCodes.Resolution_Required回调可以实现这一点。

 类似资料:
  • 有人能告诉我为什么列表返回空吗?我的xpath是准确的,因为我重新检查了它,但我仍然无法迭代它,而调试for循环甚至没有执行。我不确定我哪里出了问题。

  • 问题内容: 我正在尝试编写一个用于与last.fm API进行交互的小脚本。 我有一点使用的经验,但是以前使用它的方式似乎无效,而是返回一个空列表。 我删除了API密钥,因为我不知道它到底应该有多私密,并举了一个示例,说明了我在该位置接收的XML。 与API交互的类: 调用的get_now_playing方法: 我收到的xml样本: 问题答案: 问题在于, 如果给定标签名称,则仅搜索元素的直接后代

  • 我试图用刮擦和飞溅来刮取衣服的图像和一些产品信息。我想得到的形象,只有产品(所以没有模型)。比如这张照片https://www2.hm.com/nl_nl/productpage.0220094001.html 然而,如果我试图让src在Scrapy shell中 回答xpath('//figure[包含(@class,“secondary”)]///img//@src')。摘录() 返回一个空列

  • 我正在尝试检索一个带有Android特定注释的类列表。我正在尝试使用反射库来完成此操作。但无论我做什么,Reflections都返回一个空集。最后,我尝试使用Reflections.getAllTypes(),它应该返回包中的所有类,它给我的消息是“Could not find subtypes of Object.nake SubTypesScanner initialized to inclu

  • 我正在使用JOOQ和Postgres。在博士后中,我有一个专栏性别: (表本身是一个视图,性别列是用Java计算的值的占位符) 在Java中,当I.fetch()视图时,我会对每条记录进行一些计算: 所有看起来都很好,如果打印值,它们都是正确的。但是,当我在我的技能记录上调用intoResultSet()时,性别列在所有值旁边都有一个星号,例如“*男性”。 然后,我使用结果集作为OpenCSV C

  • 我们正在使用Spring 4.x 和 swagger-jersey2-jaxrs_2.10。Swagger 不会列出我的 API,它总是只返回版本详细信息。 pom.xml web.xml 资源类 ResourceConfig类 我的应用程序基路径/api-docs返回