2016-09-30 50 views
0

我正在使用altbeacon库监视和范围信标。我已经阅读了您的请求许可页面,只是想知道,如果我针对API 23+()的位置权限,扫描将在具有API < 23的设备上工作吗?我没有真正的设备,所以无法测试它。或者是否有任何方法不要求使用API​​低于23的设备请求位置许可?感谢您的回答位置目标权限23

+0

为什么不使用虚拟设备进行测试?所有的API都可用。仅供参考,API 23对权限做了巨大的改变,从那里开始,应该在运行时检查权限,在此之前,这使用了清单,所以没有理由阻止。 – AxelH

+0

虚拟设备无法使用蓝牙,需要扫描信标。 –

+0

我的不好,但评论的其余部分仍然存在。您需要针对之前的23和其他版本管理权限。 – AxelH

回答

0

再论的核心问题:

如果你建立具有的minSdkVersion < 23但targetSdkVersion一个应用程序> = 23当您尝试扫描蓝牙信标会发生什么?

简答:它的工作原理。

较长的答案:

  • 用户权限要求不会发生。与minSdkVersion < 23,编译器将阻止您包含一行代码,如requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
,因为它不会在早期的Android版本上运行。如果你将它包装在一个像if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)这样的if语句中,它将不会被执行。如果您添加注释,例如@SuppressLint("NewApi"),则尝试执行代码时,应用程序将崩溃。

  • 无论用户权限是否被授予,信标扫描都将在前台和后台工作。早期的Android版本无法向用户请求权限,因此该应用的行为就好像他们已经被授予了一样。

+0

感谢,这是我正在寻找的答案! –

0

在Android 23上,您需要检查应用程序是否已被授予“危险”权限,并且是否要求用户。
Android支持库为此提供了辅助函数。
请参阅Requesting Permissions at Run Time。 主要功能是checkSelfPermissionrequestPermissions
为了不与旧版本的Android的问题,你可以使用以下命令来检查您是否运行棉花糖或没有在设备上:

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

这将返回true如果您运行的棉花糖的设备上或更新,否则为false。所以,如果这返回true,请检查权限,否则不要。
您应该也可以在调用checkSelfPermissionrequestPermissions的函数上使用注释@SuppressLint("NewApi")

+0

根据:[链接](https://altbeacon.github.io/android-beacon-library/requesting_permission.html)我不知道如果该库将执行扫描信标,如果该权限仅适用于API 23 +。 。这就是我要求的:D –

+0

在Android Beacon库2.9.1的AndroidManifest上看,它使用以下内容来包含ACCESS_COARSE_LOCATION权限: 这意味着仅在具有api 23及以上版本的设备上请求权限,所以在较低apis上不需要该权限。所以,它应该可以工作。这可能也帮助你:http://stackoverflow.com/questions/35988149/altbeacon-library-background-service/35988619#35988619 – jvlach