我已经编写了代码,它返回了一个Android设备的所有配对蓝牙设备列表。配对蓝牙设备列表中的一个也是我的笔记本电脑。
现在我的问题是
有没有办法可以监控笔记本电脑和Android设备之间的蓝牙连接状态。如果存在蓝牙连接,我需要的输出是“已连接”,如果没有蓝牙连接则需要“已断开”
Android版本是2.1.Eclair
在我继续前进之前,我有一些问题。
- >我通过USB连接笔记本电脑和设备时是否应该测试此应用程序? - >如何在单独的线程或AsyncTask上运行它? - >如果我通过USB连接设备和笔记本电脑然后启动应用程序,上面的代码对我不起作用。即使笔记本电脑和手机在附近且配对,我也无法在手机中看到连接状态。
我写的代码如下
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bluetooth_);
out = (TextView) findViewById(R.id.textView1);
// Getting the Bluetooth adapter
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
// out.append("\nAdapter: " + adapter);
// Check for Bluetooth support in the first place
// Emulator doesn't support Bluetooth and will return null
if (adapter == null) {
out.append("\nBluetooth NOT supported. Aborting.");
return;
}
// Starting the device discovery
out.append("\nStarting discovery...");
adapter.startDiscovery();
out.append("\nDone with discovery...");
// Listing paired devices
out.append("\nDevices Pared:");
Set<BluetoothDevice> devices = BluetoothAdapter.getDefaultAdapter()
.getBondedDevices();
for (BluetoothDevice device : devices) {
out.append("\nFound device: " + device);
out.append("\n The name is: " + device.getName());
out.append("\n The type is: "
+ device.getBluetoothClass().getDeviceClass());
Method m;
try {
System.out.println("Trying to connect to " + device.getName());
m = device.getClass().getMethod("createInsecureRfcommSocket",
new Class[] { int.class });
BluetoothSocket socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();
out.append("Connected");
} catch (Exception e) {
e.printStackTrace();
out.append("\nDisconnected");
}
}
}
答案 0 :(得分:2)
您使用的是哪个Android版本?
您必须拥有AndroidManifest.xml的权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
您可以尝试以下代码,但请务必在单独的线程或AsyncTask上运行,否则您的UI可能会挂起。 这将检查您的配对设备并尝试连接到每个设备。如果成功,则会在logcat上打印已连接,否则会打印已断开连接。
private void checkPairedPrinters() throws IOException {
Set<BluetoothDevice> devices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
for (BluetoothDevice device : devices) {
Method m;
try {
System.out.println("Trying to connect to " + device.getName());
m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class });
BluetoothSocket socket = (BluetoothSocket) m.invoke(device, 1);
socket.connect();
System.out.println("Connected");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Disconnected");
}
}
}