2016-05-27 6 views
2

私のラップトップ(Ubuntu 14.04を実行中)とAndroid(6.0.1)の電話(Sony Xperia Z3)をペア設定しました。私はファイルを前後に送ることができます。 Bluetooth接続メニューには、ファイルが送信された場合に接続スイッチがONに切り替わることが表示されます。私はBluetooth経由で私のラップトップに自分の携帯電話からのデータを送信したい携帯電話からBluetooth経由でデータを送信する

sudo rfcomm connect rfcomm0 [MAC ADDRESS] [CHANNEL] 

は、私が使用して永続的な接続を確立しました。私がこれを実行すると、 codeスイッチもオンになりますが、すぐに接続が切断されます(スイッチはオフに戻ります)。

Logcatはinit()を呼び出した後、次の警告が表示されます。

W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback

write()方法に、この例外を呼び出すときに

E/error: error init:java.io.IOException: read failed, socket might closed or timeout, read ret: -1

一部のチャンネルが失敗し、接続を拒否しrfcomm使用して接続します。私の推測では、間違ったチャンネルを使用しているということです。

  • rfcommを呼び出すときにどのチャネルを使用するのかを確認するにはどうすればよいですか?
  • このチャンネルをAndroidアプリでどのように指定できますか?
  • 使用するUUIDを知るにはどうすればよいですか?
  • このコード例では、最初のUUIDが使用されています。なぜですか?
+1

Heh ...そして今回は、USB経由で電話機を接続しています。 //全く助けてくれない... – durbnpoisn

答えて

1

何とか私は方法createRfcommSocketToServiceRecordで動作させることができませんでした。その後、私はそれは、Linuxの端末上で待機しているチャネルを示しており、私は可能性がsudo rfcomm listen rfcomm0を発行

int channel = 1; // substitute with channel you are listening on 
Method m = device.getClass().getMethod("createRfcommSocket",new Class[] { int.class }); 
BluetoothSocket socket = (BluetoothSocket) m.invoke(device, channel); 

ParcelUuid[] uuids = device.getUuids(); 
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuids[0].getUuid()); 

としてこれらの行を置き換える:私はその後、削除されたなかった

ついに!どのように私はRFCOMMを呼び出すときに使用するチャネルを知ることができます

  • :私自身の質問に答えるために


    どのように私は私のAndroidアプリでこのチャネルを指定することができますか?sudo rfcomm listen rfcomm0

  • を発行する場合、Linux端子はチャンネルを示し
    私はリフレクションを使用してアクセスしていますが方法がどのようにUUIDを使用するかを知ることができる

  • createRfcommSocket)今、このパラメータを持っていますか?
    このソリューションではなし。

  • 例のコードでは、最初のUUIDが使用されています。なぜですか?
    見つかった解決策には関係ありません。

関連する問題