1

メーカーの異なる携帯電話を2台接続しようとしたところ、接続できませんでした。私は、2つのXperia電話とBluetoothが非常にうまく接続するアプリを開発しました(それらの間のSamsungデバイスと同じです)。しかし、Sony Xperia と Samsung の携帯電話に接続しようとすると、接続しません。

このアプリを作成したとき、BluetoothChatService クラス フォーム Google BluetoothChat Example (バージョン 8) をプロジェクトにコピーしました (このファイルは変更しませんでした) が、上記の問題があります。というわけで、10回目のAPI版Google BluetoothChatサンプルをダウンロードして、初回は接続するが、次回は接続しない。問題は、Sony Xperia電話がSamsung電話からのbluetoohtデバイス情報を記録せず、Samsungがこの情報を記録することです.

01-18 11:29:07.036: D/BluetoothService(1744): B0:EC:71:E3:FB:41 bond state 11 -> 10 (9)
01-18 11:29:07.066: V/BluetoothEventRedirector(18829): Received android.bluetooth.device.action.BOND_STATE_CHANGED
01-18 11:29:07.066: E/CachedBluetoothDeviceManager(18829): Got bonding state changed for B0:EC:71:E3:FB:41, but we have no record of that device.
01-18 11:29:07.066: W/CachedBluetoothDeviceManager(18829): showUnbondMessage: Not displaying any message for reason:9

次のステップは、2 台の電話のペアリングを解除することだったので、それらのstackoverflow の例を試してみると、そのうちの 1 つがこの問題を解決しました。

これで、Sony Xperia U から Samsung Galaxy SII への接続はうまくいきましたが、Samsung SII から Xperia U に接続しようとすると、IOExpection に「接続を拒否します」というメッセージが表示されて接続できません。

これは、Google BluetoothChatService ファイルの例の ConnectThread クラスからのコピーです。

 public void run() {
        Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
        setName("ConnectThread" + mSocketType);

        // Always cancel discovery because it will slow down a connection
        mAdapter.cancelDiscovery();

        // Make a connection to the BluetoothSocket
        try {
            // This is a blocking call and will only return on a
            // successful connection or an exception
            mmSocket.connect();
        } catch (IOException e) {
            Log.i("INFO", e.getMessage());
            // Close the socket
            try {
                mmSocket.close();
            } catch (IOException e2) {
                Log.e(TAG, "unable to close() " + mSocketType +
                        " socket during connection failure", e2);
            }
            connectionFailed();
            return;
        }

        // Reset the ConnectThread because we're done
        synchronized (BluetoothChatService.this) {
            mConnectThread = null;
        }

        // Start the connected thread
        connected(mmSocket, mmDevice, mSocketType);
    }

更新 1:

私はこの問題について考えていて、BluetoothChatService からのいくつかの行にコメントしました。Samsung と Xperia デバイス間の接続は現在です。接続はできているのですが、例外コードが通り過ぎて接続が終了したので、例外コードをコメントしました。しかし、Xperia と Galaxy Nexus を接続しようとすると、問題が発生します。

ConnectThread クラスの Run メソッドは次のとおりです。

 public void run() {
        Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
        setName("ConnectThread" + mSocketType);

        // Always cancel discovery because it will slow down a connection
        mAdapter.cancelDiscovery();

        // Make a connection to the BluetoothSocket
        try {
            // This is a blocking call and will only return on a
            // successful connection or an exception
            mmSocket.connect();
        } catch (IOException e) {
            // Close the socket
 //                try {
 //                    mmSocket.close();
 //                } catch (IOException e2) {
 //                    Log.e(TAG, "unable to close() " + mSocketType +
 //                            " socket during connection failure", e2);
 //                }
 //                connectionFailed();
 //                return;
        }

        // Reset the ConnectThread because we're done
        synchronized (BluetoothService.this) {
            mConnectThread = null;
        }

        // Start the connected thread
        connected(mmSocket, mmDevice, mSocketType);
    }
4

0 に答える 0