21

Android デバイスで Bluetooth 経由でファイルを送信しようとしています。発見、接続を行い、Bluetoothソケットを作成しました。問題は、Bluetoothソケットの出力ストリームにバイト配列を書き込んでいるときに、何かが送信されていることを受け入れても、受信側は何も受信しないことです。

これが私がやっていることです(悪いのはBluetoothアダプターです)

お知らせ下さい。

try
    {
        BluetoothDevice dev = bad.getRemoteDevice(a);
        bad.cancelDiscovery();

        dev.createRfcommSocketToServiceRecord(new UUID(1111, 2222));
        Method m = dev.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        bs = (BluetoothSocket) m.invoke(dev, Integer.valueOf(1));
        bs.connect();
        tmpOut = bs.getOutputStream();
    }catch(Exception e)
    {

    }

    File f = new File(filename);

    byte b[] = new byte[(int) f.length()];
    try
    {
        FileInputStream fileInputStream = new FileInputStream(f);
        fileInputStream.read(b);
    }catch(IOException e)
    {
        Log.d(TAG, "Error converting file");
        Log.d(TAG, e.getMessage());
    }

    try {
        tmpOut.write(b);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
4

3 に答える 3

3

リモートBluetoothデバイスのシリアルサービスに接続するために切り取った以下のコードを使用していますが、問題なく動作しています。他のデバイス (モバイルまたは PC) に、Bluetooth 経由のシリアル通信用のサーバー ソケットがあることを確認してください (以下のサーバー側のコードを参照してください)。

クライアント側:

UUID serialUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothDevice btDevice = btAdapter.getRemoteDevice(BTAddress); // Get the BTAddress after scan
BluetoothSocket btSocket = btDevice.createRfcommSocketToServiceRecord(SERIAL_UUID);
btSocket.connect();
InputStream iStream = btSocket.getInputStream();
OutputStream oStream = btSocket.getOutputStream();

サーバ側:

UUID serialUUID = new UUID("1101", true);
String serviceURL = "btspp://localhost:" + serialUUID
        + ";name=Android BT Server;authorize=false;authenticate=false";
StreamConnectionNotifier connectionNotifier = (StreamConnectionNotifier) Connector
                        .open(serviceURL);
// Blocking method will wait for client to connect
StreamConnection connection = connectionNotifier.acceptAndOpen();

RemoteDevice remoteDevice = RemoteDevice.getRemoteDevice(connection);
InputStream btInput = connection.openInputStream();
OutputStream btOutput = connection.openOutputStream();
于 2012-11-24T17:26:44.863 に答える
1

リフレクションを介して呼び出す代わりに、標準のapi呼び出しを使用しないのはなぜですか。

BluetoothSocket socket =  destination
                              .createRfcommSocketToServiceRecord(new UUID(...)) ;

また、キャッチブロックは空です。ソケットは例外なく接続されていますか?何らかの理由で接続が失敗した場合、ConnectはIOExceptionをスローします。このリンクを参照してください

于 2012-12-13T06:27:35.987 に答える
0

dev と bs は、try/catch ブロック内で宣言されているため、tmpout が使用される前に範囲外になる可能性があります。

于 2012-09-28T21:59:46.687 に答える