3

我正在开发一个 Android 应用程序,我希望它能够找到并列出 BLE 设备。

这里没有太多关于它的主题,我不明白。我试过使用

startLeScan(BluetoothAdapter.LeScanCallback callback);

但是 Eclipse 说 LeScanCallback 无法解决或者不是一个字段(我对 BluetoothManager 和 LeDeviceListAdapter 有同样的问题)。我拥有所有 BT 权限,导入了 BluetoothGatt、BluetoothGattCallback 并将三星 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();
           }
       });
   }
};

此外,错误 --> 无法运行 --> 没有日志

4

6 回答 6

2

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

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

于 2013-11-08T18:55:16.643 回答
2

The Bluetooth SIG has a application accelerator kit for BLE which includes complete working code for Android. Great resource to get started, free download at https://developer.bluetooth.org/Pages/Bluetooth-Smart-Developers.aspx

于 2013-10-17T23:34:48.943 回答
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();
           }
       });
   }
};
于 2013-09-23T21:28:25.987 回答
1

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

我不得不删除意外的罐子:

  1. 在eclipse包资源管理器中,右键单击项目
  2. 构建路径>配置构建路径
  3. 转到选项卡
  4. 选择坏的android.jar
  5. 删除

此致,

莱尼

于 2015-09-08T14:00:59.877 回答
0

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

如果没有 - 请确保您在 Android SDK 管理器中安装了 API 18。

于 2013-10-06T10:42:28.783 回答
-1

好吧,我认为您必须先了解一些概念,然后再进行操作。

1.了解什么是类,什么是对象,什么是变量,更好的理解变量作用域等。

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

2.不要混淆三星BLE SDK和Android BLE代码。它们是相似的,但是您所做的与三星 BLE SDK 无关,因此包括三星 JAR 绝对无济于事。

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

于 2013-09-24T03:41:52.493 回答