我正在进行BLE蓝牙扫描,除了Android 10以外的所有设备都可以工作。Android 10不能工作,任何人都可以回答有关扫描BLE蓝牙的版本10的问题
发布于 2019-11-02 16:48:09
要使BLE扫描在针对Android 10的Android应用程序上工作,您需要询问用户
ACCESS_BACKGROUND_LOCATION
与ACCESS_FINE_LOCATION一起,也不要忘记在清单中添加权限:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />原因如下:
Android 10 (API level 29)引入了许多功能和行为更改,以更好地保护用户隐私。这些变化扩展了用户对他们的数据和他们提供给应用程序的功能的透明度和控制力。
简而言之,你的问题:
在后台通过
访问设备位置需要权限
为了支持用户对应用程序访问位置信息的额外控制,Android10引入了ACCESS_BACKGROUND_LOCATION权限。
与ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限不同,ACCESS_BACKGROUND_LOCATION权限仅影响应用程序在后台运行时对位置的访问。除非满足以下条件之一,否则应用程序将被视为在后台访问位置:
属于该应用程序的活动是可见的。应用程序正在运行已声明位置的前台服务类型的前台服务。
要声明应用程序中服务的前台服务类型,请将应用程序的targetSdkVersion或compileSdkVersion设置为29或更高。详细了解前台服务如何继续执行需要访问位置的用户发起的操作。
希望这能解决您的问题:)
发布于 2020-02-21 17:01:35
在android 10上需要启用location才能执行BLE扫描。要检查location是否启用,并要求用户启用location服务(Kotlin):
val lm = getSystemService(Context.LOCATION_SERVICE) as LocationManager
if (!LocationManagerCompat.isLocationEnabled(lm)) {
// Start Location Settings Activity, you should explain to the user why he need to enable location before.
startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
}androidx.appcompat:appcompat:1.1.0依赖中提供了androidx类,如果不使用androidx,可以使用:
lm.isLocationEnabled()发布于 2020-11-13 06:27:14
仅向AndroidManifest.xml添加以下权限是不够的
android.permission.ACCESS_FINE_LOCATION,
android.permission.ACCESS_COARSE_LOCATION,
android.permission.ACCESS_BACKGROUND_LOCATION. 向MainActivity添加权限,例如
ActivityCompat.requestPermissions(
this,
new String[]
{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 0);https://stackoverflow.com/questions/58428763
复制相似问题