当前位置: 首页 > 知识库问答 >
问题:

Android 6.0上的蓝牙低能启动扫描找不到设备

弘承业
2023-03-14

我正在使用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);

它启动扫描,但未找到任何设备。请帮帮我!!!!

共有3个答案

冉永宁
2023-03-14

就我而言(HTC M9),我还必须进入蓝牙下的Android设置菜单并手动扫描BT设备。

戚俊人
2023-03-14

就像@Jacopo托西说你必须要求位置权限一样。你可以在这里阅读如何做到这一点。您还必须打开位置。我不知道为什么这样做。但这是我设法让它工作的唯一方法。

邵祺
2023-03-14

我在同样的问题上挣扎。要修复它,您必须在手机设置中启用“位置”(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()方法相关联。这很令人沮丧,当我点击“打开”按钮时,我想填充列表。此外,仍然需要找到未配对的设