我正在尝试将 BLE 功能添加到我正在使用此链接作为指南的插件中https://github.com/android/connectivity-samples/tree/master/BluetoothLeGatt/Application/src/main /java/com/example/android/bluetoothlegatt
我创建了所有相同的类,并使用一些更新的方法修改了代码,并将它们添加到我的应用程序中。我添加了代码,以便通过 DeviceScanActivity 类中的 BroadcastReceiver 类通过程序的主要部分访问它,并通过我的主程序获取其意图。尽管 BLE 设备屏幕会弹出并显示一些设备(如自述文件所示),但它通常是空白的。错误“com.atakmap.android.helloworld.plugin”扫描过于频繁”和“无法找到回调包装器”不断出现。我无法在指南链接的四个函数中找到控制扫描活动的位置,并且我不知道“无法找到回调包装器”是什么意思。我想知道我应该从这里做什么。也许有更新版本的教程来展示如何使用 BLE,这样这些错误就不会出现。 [[[]()]()]() 这是我的 DeviceScanActivity 类中的 BroadcastReceiver 类,我在其中从扫描中获取数据
/**
* Broadcast Receiver that is responsible for getting the data back to the
* plugin.
*/
static class DeviceScanListener extends BroadcastReceiver {
private boolean registered = false;
private DeviceScanActivity.DeviceScanReceiver sdr = null;
synchronized public void register(Context context,
DeviceScanActivity.DeviceScanReceiver sdr) {
if (!registered)
context.registerReceiver(this, new IntentFilter(DSCAN_INFO ));
this.sdr = sdr;
registered = true;
}
@Override
public void onReceive(Context context, Intent intent) {
synchronized (this) {
try {
Bundle extras = intent
.getExtras();
if (extras != null) {
//ArrayList<BluetoothDevice> s = (HashMap<String, String>) extras.get("mgrsData");
ArrayList<BluetoothDevice> s = mLeDeviceListAdapter.mLeDevices;
for (int i = 0; i < mLeDeviceListAdapter.mLeDevices.size(); i++){
BluetoothDevice currb = mLeDeviceListAdapter.mLeDevices.get(i);
Log.d("mine","Stuff in the DeviceList");
Log.d("mine",String.valueOf(i));
}
if (s != null && sdr != null)
sdr.onDeviceScanReceived(s);
}
} catch (Exception ignored) {
}
if (registered) {
context.unregisterReceiver(this);
registered = false;
}
}
}
}
这是用于开始寻找BLE设备的按钮
final Button connectDevice = helloView.findViewById(R.id.connect_device);
connectDevice.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Todo
dd1.register(getMapView().getContext(), ddr);
Intent intent = new Intent();
intent.setClassName("com.atakmap.android.helloworld.plugin",
"com.atakmap.android.helloworld.DeviceScanActivity");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("EXTRA_MESSAGE", "");
parentActivity.startActivityForResult(intent, 0);
}
});
我已尝试更新链接中提供的代码中的方法,以确保一切正常(用较新的方法替换已折旧的方法),但我似乎无法让它工作。我期望一个屏幕显示该区域中的 BLE 设备(我在 flutter 中制作的另一个应用程序可以执行此操作并显示 BLE 设备,因此我也应该在此应用程序上看到它们),但屏幕会弹出几秒钟离开前使用设备。
我发现我使用了这个网站https://android.googlesource.com/platform/development/+/7167a054a8027f75025c865322fa84791a9b3bd1/samples/BluetoothLeGatt?autodive=0%2F%2F和这个网站https://spot。 pcc.edu/~mgoodman/developer.android.com/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/BluetoothLeService.html#l45以及Android网站上的更新文档https://developer.android .com/develop/connectivity/bluetooth/ble/find-ble-devices此处:https://developer.android.com/develop/connectivity/bluetooth/ble/connect-gatt-server#java此处: https://developer.android.com/develop/connectivity/bluetooth/ble/transfer-ble-data 到此新代码不再有此问题。