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'
}
答案 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设备以进行调试。