我正在使用Nexus 5开发低功耗蓝牙应用程序。它在Lollipop上工作,现在它不在Marshmallow上工作。我在清单和运行时的活动中设置了ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限。
这是扫描过滤器列表:
mScanFilterTest = new ScanFilter.Builder().build();
mScanFilter = new ArrayList<ScanFilter>();
mScanFilter.add(mScanFilterTest);
这些是设置:
mScanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(0)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).build();
这些是我的回调:
mBLEScan = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
Log.i(TAG, "******************************************");
Log.i(TAG, "The scan result " + result);
Log.i(TAG, "------------------------------------------");
}
};
这是我的电话:
mBluetoothLeScanner.startScan(mScanFilter, mScanSettings, mBLEScan);
它启动扫描,但未找到任何设备。请帮帮我!!!!
就我而言(HTC M9),我还必须进入蓝牙下的Android设置菜单并手动扫描BT设备。
就像@Jacopo托西说你必须要求位置权限一样。你可以在这里阅读如何做到这一点。您还必须打开位置。我不知道为什么这样做。但这是我设法让它工作的唯一方法。
我在同样的问题上挣扎。要修复它,您必须在手机设置中启用“位置”(GPS),并在运行时在应用程序中请求位置权限。两者都需要完成才能使扫描正常工作。
要请求位置权限,请将以下内容放在对话框或类似内容中:
yourActivity.requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, yourPermissionRequestCode);
并实施:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
if(requestCode == yourPermissionRequestCode)
{
... //Do something based on grantResults
}
}
在yourActivity
中处理用户选择的任何内容。您还需要执行以下操作才能打开设备的定位服务:
Intent enableLocationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
yourActivity.startActivityForResult(enableLocationIntent, yourServiceRequestCode);
您可以通过实现以下功能来检查用户是否打开了定位服务:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == yourServiceRequestCode)
{
...//Do whatever you need to
}
}
在< code >您的活动中。您也可以通过执行以下操作来手动打开定位(GPS)服务:
输入手机设置-
在电话设置中应该是这样的:
或者在快速设置下拉列表中这样:
一旦用户启用了权限并启动了定位服务,您就应该开始扫描了。我注意到,如果您在启用权限/打开定位服务时已经在扫描,它仍然不会在您的< code>onScanResults
中放置任何内容
我不确定这是iBeacons/蓝牙广告的 bug 还是“功能”(注意:广告是销售产品而不是技术蓝牙广告),以允许公司看到您的位置并将您引导到他们想要的地方。
希望这能解决您的问题!
编辑我想补充一句:你只需要扫描这个。一旦您连接到BLE设备,您就可以关闭手机上的定位服务,您仍然可以连接到您的设备。但是,您无法发现或连接到任何新设备,所有广告设备都将从onScanResults
中删除
我目前正在开发一个应用程序,将使用蓝牙低能耗。 我正在使用以下链接, http://developer.android.com/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/DeviceScanActivity.html 我无法扫描周围的BLE设备。 要扫描设备,
开启蓝牙扫描 参数说明 字段 类型 必须? 说明 blePrefix String 是 设备名称类型前缀 示例代码 Swift: RokidMobileSDK.binder.startBLEScan(blePrefix: String) ->Bool Objc: [RokidMobileSDK.binder startBLEScanWithBlePrefix:@"Rokid-"]; 手机蓝牙未打
扫描设备 介绍 需要传入扫描蓝牙设备的名称的前缀,回调均在主线程。如果传空,是无法获取设备列表。 1、单前缀蓝牙设备 参数说明 字段 类型 必须? 说明 type String 是 设备名称类型前缀 举个大栗子 String type = "Rokid-" RokidMobileSDK.binder.startBTScan(type, new IBTScanCallBack() { @Ov
我的应用程序应连接到蓝牙LE设备。通常使用mBluetoothAdapter执行设备扫描。Stratescan(mLeScanCallback) 。回调为您提供有关可用设备的信息。 如果要连接到专用设备,请执行以下操作 然后 在我看来,连接到BLE设备的唯一需要是知道BLE地址,然后通过以上两个步骤连接到它。因此,如果我已经知道一个BLE地址(例如,它写在BLE设备的标签上),我就不需要执行BLE
我正在尝试使用基于处理的android应用程序扫描蓝牙设备。我想使用处理通过蓝牙与我的微控制器板通信,如下例所示: http://webdelcire.com/wordpress/archives/1045 我成功地在我的android平板电脑上启动了这个应用程序。但是,我无法在平板电脑上列出蓝牙设备。我的平板电脑识别的唯一蓝牙设备是我电脑上的蓝牙适配器。为什么我不能列出所有蓝牙设备?我的电脑能够
我制作了一个android应用程序来扫描蓝牙设备,并向我的服务器发送一个HTTP请求,这样我就可以检测它们是开着还是关着。我已经用我的带有蓝牙适配器的台式电脑测试过了,效果很好。当检测到电脑上的蓝牙功能时,它显示电脑是打开的,当我关闭电脑上的蓝牙功能时,它是关闭的。现在,我需要使用这个应用程序的设备有:雅伯投影仪、Bose SoundLink和JBL耳机,但我遇到了一些问题。 首先,投影仪似乎无法
我正在开发一款Android应用程序,可以实现蓝牙功能。蓝牙扫描,一切正常(我在这里参考了android bletooth聊天代码示例:(https://android.googlesource.com/platform/development//25b6aed7b2e01ce7bdc0dfa1a79eaf009ad178fe/samples/BluetoothChat),但当蓝牙扫描运行时,我的
我正在编写一个应用程序来打开蓝牙,扫描附近可发现的蓝牙设备,包括配对和未配对,以便将它们添加到列表中。 这是我的代码: 代码看起来很好,但它没有找到或添加任何附近的设备到列表中,当我退出应用程序时,我得到以下异常日志: 有解决问题的办法吗? 要将配对设备添加到列表视图,我必须添加一个按钮并将其与scan()方法相关联。这很令人沮丧,当我点击“打开”按钮时,我想填充列表。此外,仍然需要找到未配对的设