在Android中,可以使用BluetoothAdapter和BluetoothGatt类来创建BLE接收器/发射器堆栈。下面是一个示例代码,展示了如何在跨多个活动中使用BLE接收器/发射器堆栈。
首先,在你的项目中创建一个名为"BLEManager"的类,用于管理BLE连接和通信。这个类应该是一个单例类,以确保在整个应用程序中只有一个实例。
public class BLEManager {
private static BLEManager instance;
private BluetoothAdapter bluetoothAdapter;
private BluetoothGatt bluetoothGatt;
private BLEManager() {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}
public static BLEManager getInstance() {
if (instance == null) {
instance = new BLEManager();
}
return instance;
}
public boolean isBluetoothSupported() {
return bluetoothAdapter != null;
}
public boolean isBluetoothEnabled() {
return bluetoothAdapter.isEnabled();
}
public void enableBluetooth(Activity activity, int requestCode) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivityForResult(enableBtIntent, requestCode);
}
public void startScan(BluetoothAdapter.LeScanCallback callback) {
bluetoothAdapter.startLeScan(callback);
}
public void stopScan(BluetoothAdapter.LeScanCallback callback) {
bluetoothAdapter.stopLeScan(callback);
}
public void connectToDevice(BluetoothDevice device, BluetoothGattCallback callback) {
bluetoothGatt = device.connectGatt(context, false, callback);
}
public void disconnectDevice() {
if (bluetoothGatt != null) {
bluetoothGatt.disconnect();
bluetoothGatt.close();
bluetoothGatt = null;
}
}
// Other BLE operations like read, write, subscribe, etc.
}
然后,在需要使用BLE功能的活动中,你可以通过调用BLEManager.getInstance()
来获取BLEManager的实例,并使用它来执行BLE操作。
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_ENABLE_BT = 1;
private BLEManager bleManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bleManager = BLEManager.getInstance();
if (!bleManager.isBluetoothSupported()) {
// Bluetooth is not supported on this device
return;
}
if (!bleManager.isBluetoothEnabled()) {
// Bluetooth is not enabled, ask the user to enable it
bleManager.enableBluetooth(this, REQUEST_ENABLE_BT);
} else {
// Bluetooth is enabled, start scanning for devices
startScan();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ENABLE_BT && resultCode == RESULT_OK) {
// Bluetooth is enabled, start scanning for devices
startScan();
}
}
private void startScan() {
bleManager.startScan(leScanCallback);
// TODO: Update UI to show scanning progress
}
private void stopScan() {
bleManager.stopScan(leScanCallback);
// TODO: Update UI to show scanning complete
}
private BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
// TODO: Process scanned device, e.g., add it to a list
}
};
@Override
protected void onDestroy() {
super.onDestroy();
stopScan();
bleManager.disconnectDevice();
}
}
这是一个简单的示例,演示了如何使用一个单例的BLEManager类来管理BLE连接和通信,并在多个活动中使用它。你可以根据你的需求扩展这个示例,添加其他BLE操作,如读取、写入、订阅等。