监控配对蓝牙设备的连接

时间:2012-11-06 22:23:00

标签: android bluetooth

我已经编写了代码,它返回了一个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");
        }
    }
}

1 个答案:

答案 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");
            }
        }

}