8

こんにちは友人、私は閂でbluecoveと呼ばれるサードパーティのAPIを使用してAndroidデバイスから特定のBluetoothデバイスにファイルを送信しようとしています。接続ヘッダーが設定されているときにデバイスを接続できますピア接続がリセットされるという問題に直面しています。

ここに私の以下のコードスニペットがあります。これに関するどんな助けもありがたいです。

私のアクティビティでは、送信ファイルを処理するために以下のコードを使用しています

BlueCoveImpl.setConfigObject(
                BlueCoveConfigProperties.PROPERTY_ANDROID_CONTEXT,
                this);
String deviceAddress = "0007ABB6D96E";
            int channel = 9;
            String obexURL = "btgoep://" + deviceAddress + ":"
                    + "0000110600001000800000805f9b34fb" + ";android=true";

            // String obexURL = "btgoep://" + deviceAddress + ":" + channel
            // + ";android=true";
            String fileToSend = "sdcard/DSCN9379.jpg";
            System.out.println("Connecting to " + obexURL);
            FileInputStream stream = new FileInputStream(fileToSend);
            File f = new File(fileToSend);
            int size = (int) f.length();
            byte file[] = new byte[size];
            stream.read(file);
            String filename = f.getName();
            System.out
                    .println("***************Now sending file to device*****************");
            SendFileTask task = new SendFileTask(MainActivity.this, obexURL,
                    file, filename);
            Thread thread = new Thread(task);
            thread.start();

================その下で、次のようにヘッダーが設定されたbluecove接続クラスオブジェクトを接続しようとしています。

package com.example.bluecovesample;

import java.io.OutputStream;

import javax.microedition.io.Connection;
import javax.microedition.io.Connector;
import javax.obex.ClientSession;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;

//import static write ;  
import android.content.Context;
import android.widget.Toast;

public class SendFileTask implements Runnable {

    private byte[] file;
    private String filename;
    public static final int WRITE = 2;

    String logString;

    int responseCode;
    Context context;
    String obexURL;

    public SendFileTask(Context ctx, String obexUrl, byte[] file,
            String filename) {
        this.context = ctx;
        this.obexURL = obexUrl;
        this.file = file;
        this.filename = filename;

    }

    public void run() {
        Connection connection = null;
        try {
            System.out.println(obexURL);
            // for ( int i = 0; i 3; i++ )
            {
                // connection = Connector.open("btgoep://"+btConnectionURL+
                // ":6");
                connection = Connector.open(obexURL);
            }
            // connection obtained

            // now, let's create a session and a headerset objects
            ClientSession cs = (ClientSession) connection;

            HeaderSet hs = cs.createHeaderSet();
            // toastMsg(hs.toString());
            // now let's send the connect header
            // cs.notifyAll();

            **cs.connect(hs);**

            hs.setHeader(HeaderSet.NAME, filename);
            // System.out.println("sfname:"+filename);
            int dotIndex = filename.lastIndexOf(".");
            // System.out.println("doti:"+dotIndex);
            String extension = filename.substring(dotIndex).toLowerCase();
            // System.out.println("sfname:"+extension);

            if (extension.equals(".txt")) {
                hs.setHeader(HeaderSet.TYPE, "text/plain");
            } else if (extension.equals(".jpg") || extension.equals(".jpeg")) {
                hs.setHeader(HeaderSet.TYPE, "image/jpeg");
            } else if (extension.equals(".mpeg") || extension.equals(".mpg")
                    || extension.equals(".mp3")) {
                hs.setHeader(HeaderSet.TYPE, "video/mpeg");
            } else if (extension.equals(".wav")) {
                hs.setHeader(HeaderSet.TYPE, "audio/x-wav");
            } else if (extension.equals(".3gp")) {
                hs.setHeader(HeaderSet.TYPE, "image/jpeg");
            } else if (extension.equals("mid") || extension.equals("rmi")) {
                hs.setHeader(HeaderSet.TYPE, "audio/mid");
            }

            hs.setHeader(HeaderSet.LENGTH, new Long(file.length));

            Operation putOperation = cs.put(hs);

            // System.out.println("response code:"+putOperation.getResponseCode());

            // putOperation.getResponseCode();
            // this.responseCode = putOperation.getResponseCode();

            OutputStream outputStream = putOperation.openOutputStream();
            outputStream.write(file);
            // file push complete

            outputStream.close();
            responseCode = putOperation.getResponseCode();

            putOperation.close();

            cs.disconnect(null);

            connection.close();

            // file successfully sent

            System.out.println("RESPONSE CODE " + responseCode);
            if (responseCode == ResponseCodes.OBEX_HTTP_OK) {
                System.out.println("FILE SUCCESSFULLY SENT " + filename);
            }

            else {
                System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
                        + " not in exception");

            }

        } catch (Exception e) {

            System.out.println("FILE SUCCESSFULLY NOT SENT" + filename
                    + " in exception");
            // System.out.println("In exception");
            e.printStackTrace();

            try {
                connection.close();
            } catch (Exception ex) {
                System.out.println("error closing connection" + ex.toString());
            }
        }
    }

    private void toastMsg(String msg) {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

}

上記のコードを実行しているときに、宛先デバイスで接続受け入れ通知ダイアログが表示され、行* cs.connect(hs)の実行中にピア接続が停止していることを通知されました。私のlogcatで。Logcatスタックトレース:

07-11 14:48:07.044:W / System.err(4527):java.io.IOException:ピアによって接続がリセットされました07-11 14:48:07.052:W / System.err(4527):android.bluetoothで.BluetoothSocket.readNative(ネイティブメソッド)07-11 14:48:07.059:W / System.err(4527):android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:336)07-11 14:48:07.059: W / System.err(4527):android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)07-11 14:48:07.059:W / System.err(4527):com.intel.bluetooth.BluetoothStackAndroid .connectionRfRead(BluetoothStackAndroid.java:437)07-11 14:48:07.059:W / System.err(4527):com.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139)07-11 14:48 :07.059:W / System.err(4527):com.intel.bluetooth.obex.OBEXUtils.readFully(OBEXUtils.java:71)07-11 14:48:07.059:W/System。err(4527):com.intel.bluetooth.obex.OBEXSessionBase.readPacket(OBEXSessionBase.java:217)07-11 14:48:07.059:W / System.err(4527):com.intel.bluetooth.obex .OBEXClientSessionImpl.connectImpl(OBEXClientSessionImpl.java:100)07-11 14:48:07.059:W / System.err(4527):com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07- 11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78)07-11 14:48:07.059:W / System.err(4527) :java.lang.Thread.run(Thread.java:1019)でcom.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07-11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask。 java:78)07-11 14:48:07.059:W / System.err(4527):java.lang.Thread.run(Thread.java:1019)com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07-11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask。 java:78)07-11 14:48:07.059:W / System.err(4527):java.lang.Thread.run(Thread.java:1019)

4

2 に答える 2

3

何らかの理由で、クライアントが接続を切断しています。これは、間違ったデータの送信や間違ったペアリングなど、いくつかの理由が原因である可能性があります。デバイスを正しくペアリングしていることを確認しましたか?

ペアリングコードが入力されていないことが問題になる可能性があります。これにより、ペアリングが不適切になります。

修正するには、[設定] -> [ワイヤレスとネットワーク] -> [Bluetooth 設定] に入り、「ペアリングされた」デバイスを長押しして [ペアリング解除] を選択します。次に、デバイスを 1 回押して、テキスト フィールドを含む [Bluetooth ペアリング要求] ウィンドウを生成します。 PIN (ペアリング コード) を入力しました。これが完了すると、ペアリングが成功します。

Wireshark というプログラムを使用して、プロトコルを介して送信されるメッセージを分析することもできます。

于 2012-07-14T04:55:53.813 に答える
0
import javax.obex.ClientSession;

このクラス「ClientSession」を使用します。

私の知る限り、createHeaderSet は ClientSession のメソッドではありません

どのようにしてアプリを正常にコンパイルできるのだろうか。

于 2012-09-07T08:18:07.943 に答える