3

AndroidデバイスのペアリングされたすべてのBluetoothデバイスのリストを返すコードを作成しました。ペアリングされたBluetoothデバイスのリストの1つは、私のラップトップでもあります。

今私の質問は

ラップトップとAndroidデバイス間のBluetooth接続ステータスを監視できる方法はありますか.Bluetooth接続が存在する場合は「接続済み」、Bluetooth接続がない場合は「切断済み」という出力が必要です


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

1 に答える 1

2

使用しているAndroidのバージョンはどれですか?

AndroidManifest.xmlに対する権限が必要です。

<uses-permission android:name="android.permission.BLUETOOTH" />

以下のコードを試すことができますが、必ず別のスレッドまたはAsyncTaskから実行してください。そうしないと、UIがハングアップする可能性があります。これにより、ペアリングされたデバイスがチェックされ、それぞれに接続が試行されます。成功した場合は、logcatにConnectedを出力するか、 Disconnectedを出力します。

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

}
于 2012-11-07T04:21:59.300 に答える