Android 10 不支持 BLE 蓝牙扫描

raj*_*j.a 21 android bluetooth-lowenergy

我正在研究 BLE 蓝牙扫描适用于除 Android 10 以外的所有设备。Android 10 无法正常工作,任何人都请回答有关扫描 BLE 蓝牙的版本 10 问题的问题

Ruz*_*zin 26

要在面向 Android 10 的 Android 应用程序上使用 BLE 扫描,您需要向用户询问

ACCESS_BACKGROUND_LOCATION

与 ACCESS_FINE_LOCATION 一起,也不要忘记在清单中添加权限:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

原因如下:

Android 10(API 级别 29)引入了许多功能和行为更改,以更好地保护用户的隐私。这些变化扩展了用户对其数据的透明度和控制以及他们为应用程序提供的功能。

简而言之你的问题:

在后台访问设备位置需要权限

为了支持用户对应用对位置信息的访问权限的额外控制,Android 10 引入了ACCESS_BACKGROUND_LOCATION权限。

ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION权限不同,ACCESS_BACKGROUND_LOCATION 权限仅影响应用在后台运行时对位置的访问。除非满足以下条件之一,否则应用程序将被视为在后台访问位置:

属于应用程序的活动可见。该应用程序正在运行一个前台服务,该服务已声明一种前台服务类型的位置。

要为应用中的服务声明前台服务类型,请将应用的 targetSdkVersion 或 compileSdkVersion 设置为 29 或更高。详细了解前台服务如何继续需要访问位置的用户启动的操作。

希望这能解决您的问题:)

  • **&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;** 可以正常工作。 (2认同)

Bub*_*ubu 10

您需要启用位置才能在 android 10 上执行 BLE 扫描。要检查位置是否已启用并要求用户启用位置服务 (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))
}
Run Code Online (Sandbox Code Playgroud)

LocationManagerCompatclassandroidx.appcompat:appcompat:1.1.0依赖于可用,如果您不使用 androidx,则可以使用:

lm.isLocationEnabled()
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 7

AndroidManifest.xml 添加以下权限是不够的

android.permission.ACCESS_FINE_LOCATION,  
android.permission.ACCESS_COARSE_LOCATION,  
android.permission.ACCESS_BACKGROUND_LOCATION. 
Run Code Online (Sandbox Code Playgroud)

向 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);
Run Code Online (Sandbox Code Playgroud)