【问题标题】:Location target permission 23位置目标权限 23
【发布时间】:2016-09-30 12:01:18
【问题描述】:

我正在使用 altbeacon 库来监控和测距信标。我已阅读您的请求权限页面,只是想知道,如果我针对 API 23+ () 定位位置权限,扫描是否适用于 API

【问题讨论】:

  • 为什么不用虚拟设备做测试呢?所有 API 都可用。仅供参考,API 23 对权限进行了巨大的更改,从那里开始,应该在运行时检查权限,在此之前,使用清单,所以没有理由阻止那里。
  • 虚拟设备无法使用蓝牙,需要扫描信标。
  • 我的错,但评论的其余部分仍然有效。您需要以不同方式管理之前 23 和其余的权限。
  • 是的,我愿意,但我的问题是,如果我仅在 API >= 23 的设备上使用位置服务,我是否能够在 API
  • 再一次,如果您正确管理您的权限,是的(除非 API 不支持这些 API)。更改仅适用于较新的 API(23 +),其余代码将被跳过(您的条件应该这样做)并且它将起作用。基本上,您只需要使用虚假的蓝牙数据来测试这是否可行,并且确定在 AVD 中的位置是否相同,无需使用真实的信标进行测试。

标签: android ibeacon ibeacon-android


【解决方案1】:

重述核心问题:

如果您构建的应用程序的 minSdkVersion = 23当您尝试扫描蓝牙信标时会发生什么?

简短的回答:它有效。

更长的答案:

  • 不会发生用户权限请求。 minSdkVersion requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
 这样的代码行,因为它不会运行较早的安卓版本。如果你将它包装在像if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 这样的 if 语句中,它将不会被执行。如果添加@SuppressLint("NewApi") 之类的注解,应用在尝试执行代码时会崩溃。

  • 信标扫描将正常工作,无论是在前台还是后台,无论是否未授予用户权限。较早的 Android 版本无法向用户请求权限,因此该应用程序的行为就像他们已被授予一样。

【讨论】:

    【解决方案2】:

    在 Android 23 及更高版本上,您需要检查应用是否已被授予“危险”权限,如果没有则询问用户。
    Android 支持库为此提供了帮助函数。
    Requesting Permissions at Run Time。 主要功能有checkSelfPermissionrequestPermissions
    为了不让旧版本的 Android 出现问题,您可以使用以下命令检查您是否在运行 Marshmallow 的设备上:

    public static boolean isMNC() {     
       return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    }
    

    如果您使用的是运行 Marshmallow 或更新版本的设备,这将返回 true,否则返回 false。因此,如果返回 true,请检查权限,否则不要。
    您可能还应该在调用checkSelfPermissionrequestPermissions 的函数上使用注释@SuppressLint("NewApi")

    【讨论】:

    • 基于:link 如果权限仅适用于 API 23+,我不知道库是否会执行扫描信标..这就是我要求的:D
    • 查看Android Beacon Library 2.9.1的AndroidManifest,它使用以下内容包含ACCESS_COARSE_LOCATION权限: 这意味着只有在 api 23 及以上的设备上才请求权限,因此在较低的 api 上不需要。所以,它应该可以正常工作。这也可能对您有所帮助:stackoverflow.com/questions/35988149/…
    猜你喜欢
    • 2015-03-20
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多