无法使用Android 6.0或更高版本扫描BLE设备

时间:2018-02-28 16:17:32

标签: android bluetooth-lowenergy

Android中有一个奇怪的错误。 我正在构建一个可以连接到BLE设备的应用程序。 对于我的测试,我使用了我的三星J3和Android 5.1.1,一切都还可以。

现在我尝试使用Android 6.0的Android设备安装我的应用程序,但我无法扫描BLE设备。

这是我的Gradle文件:

MyPojo

这是我的扫描活动类:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.devicesensor"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support:design:25.2.0'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:cardview-v7:25.2.0'
}

2 个答案:

答案 0 :(得分:0)

如果您的目标是API级别23+并且在使用Android 6.0+的设备上运行,则必须在运行时询问用户权限。要扫描蓝牙设备,您需要ACCESS_COARSE_LOCATION / ACCESS_FINE_LOCATION。

您可以在Android Developers Site上找到如何执行此操作。

答案 1 :(得分:0)

您可以使用BluetoothLeScanner从API级别发现蓝牙LE设备:21。它可以使用ScanFilter扫描特定类型的蓝牙LE设备。它还可以请求不同类型的回调来传递结果。

使用getBluetoothLeScanner()获取BluetoothLeScanner的实例。

注意:此处的大多数扫描方法都需要BLUETOOTH_ADMIN权限。

您可以查看this示例,以便即时实施。

  

此外,请确保在开始之前获得以下权限   扫描,显然你必须启用位置服务   android 6.0。

<manifest ... >
  <uses-permission android:name="android.permission.BLUETOOTH" />
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  ...
</manifest>

您可以使用新的SettingsClient API打开位置服务。

如果您想声明您的应用仅适用于支持BLE的设备,请在应用清单中包含以下内容:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

BLE Scanner应用程序可用于列出范围内的可用BLE设备以进行调试。