在尝试查找BLE设备时如何使用LeScanCallback?

时间:2013-09-23 11:03:11

标签: android bluetooth-lowenergy

我正在使用Android中的应用程序,我希望它能够找到并列出BLE设备。

这里的主题不是很多,我不明白。我试过用

startLeScan(BluetoothAdapter.LeScanCallback callback);

但是Eclipse说LeScanCallback无法解析或者不是字段(我对BluetoothManager和LeDeviceListAdapter也有同样的问题)。我拥有所有BT权限,导入BluetoothGatt,BluetoothGattCallback并在正确的位置安装Samsung SDk jar文件。我错过了什么?

我已经在Android开发者页面中使用了这个代码提示(只是我代码的一部分),但我无法让它工作:

public class DeviceScanActivity extends ListActivity {

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;
public boolean scanning;
public BluetoothAdapter aBTAdapter;
public Handler aHandler;

//------------------------------------------------

private void scanLeDevice(final boolean enable) {

    if (enable) {
        // Stops scanning after a pre-defined scan period.
        aHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                scanning = false;
                aBTAdapter.stopLeScan(mLeScanCallback);
            }
        }, SCAN_PERIOD);

        scanning = true;

        aBTAdapter.startLeScan(mLeScanCallback);

    } else {
        scanning = false;
        aBTAdapter.stopLeScan(mLeScanCallback);
    }
};
//------------------------------------------

}

我需要做什么才能让Eclipse识别BluetoothManager,LeDeviceListAdapter和LeScanCallback? 如何引入mLeScanCallback变量?

任何帮助将不胜感激!我对编程很新,所以请教学答案。


编辑:

我已尝试使用此代码声明回调但它不起作用,给出了与上述相同的错误(BluetoothAdapter.LeScanCallback无法解析或不是字段):

private LeDeviceListAdapter mLeDeviceListAdapter;

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               mLeDeviceListAdapter.addDevice(device);
               mLeDeviceListAdapter.notifyDataSetChanged();
           }
       });
   }
};

另外,错误 - >不能运行它 - >没有记录

6 个答案:

答案 0 :(得分:2)

Bluetooth SIG有一个针对BLE的应用程序加速器套件,其中包含适用于Android的完整工作代码。开始的好资源,免费下载https://developer.bluetooth.org/Pages/Bluetooth-Smart-Developers.aspx

答案 1 :(得分:2)

我有同样的问题,简要地说,并通过以下方式解决:

首先确保您已下载API级别18+。右键单击您的项目,转到属性 - > Android系统。确保选择Android 4.3或更高版本作为项目构建目标。应用更改,你应该很高兴。

答案 2 :(得分:1)

您使用的代码示例下方甚至还有一个代码示例: http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#find

你需要引入一个像这样的字段变量:

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
           @Override
           public void run() {
               mLeDeviceListAdapter.addDevice(device);
               mLeDeviceListAdapter.notifyDataSetChanged();
           }
       });
   }
};

答案 3 :(得分:1)

我刚刚解决了相同(/类似)的问题.. 在我的情况下,除了参考库之外,我还错过了另一个android.jar (api 4)。 Eclipse正在使用添加的一个,因此LeScanCallback接口不存在(在我的情况下Context.BLUETOOTH_SERVICE不是下层...)

我不得不删除意外的jar:

  1. 在eclipse包资源管理器中,右键单击项目
  2. 构建路径> 配置构建路径
  3. 转到 Librairies 标签
  4. 选择糟糕的android.jar
  5. 删除
  6. 致以最诚挚的问候,

    LENI

答案 4 :(得分:0)

您可以尝试使用Shift + Crtl + O来组织导入。如果您使用API​​ 18,那么它应该自动添加适当的导入; 导入android.bluetooth.BluetoothAdapter;

如果不是 - 请确保在Android SDK Manager中安装了API 18。

答案 5 :(得分:-1)

我认为在开始工作之前,你必须先了解一些概念。

1.理解什么是类,什么是对象,什么是变量,甚至更好地理解变量范围等。

如果您发布的代码是完整代码,那么它肯定不起作用,因为您只需复制一部分代码而不声明代码使用的变量。例如,在使用变量之前,你必须像Boni2k一样声明和初始化mLeScanCallback。

2.不要混淆Samsung BLE SDK和Android BLE代码。它们是相似的,但你所做的与三星BLE SDK无关,所以包括三星JAR绝对没有帮助这种情况。

虽然Android中的BLE开发并不是很难通过代码复杂性(高级远程IO API!),但我认为如果你在没有编程基础的情况下深入研究它会受到影响。最好通过一些基本的Java编程(至少要理解示例代码)和Android开发概念。