Сброс однорангового соединения Bluetooth

Привет, друзья, Я пытаюсь отправить файл с устройства Android на определенное устройство Bluetooth, используя сторонний API под названием bluecove с obex. Я могу подключить устройство, когда установлен заголовок соединения. Я столкнулся с проблемой сброса однорангового соединения .

Вот мой фрагмент кода ниже. любая помощь в этом ценится.

В своей деятельности я использую приведенный ниже код для обработки файла отправки

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:

07-11 14:48:07.044: W/System.err(4527): java.io.IOException: Connection reset by peer 07-11 14:48:07.052: W/System.err(4527): at android.bluetooth.BluetoothSocket.readNative(Native Method) 07-11 14:48:07.059: W/System.err(4527): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:336) 07-11 14:48:07.059: W/System.err(4527): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.BluetoothStackAndroid.connectionRfRead(BluetoothStackAndroid.java:437) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXUtils.readFully(OBEXUtils.java:71) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXSessionBase.readPacket(OBEXSessionBase.java:217) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXClientSessionImpl.connectImpl(OBEXClientSessionImpl.java:100) 07-11 14:48:07.059: W/System.err(4527): at com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85) 07-11 14:48:07.059: W/System.err(4527): at com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78) 07-11 14:48:07.059: W/System.err(4527): at java.lang.Thread.run(Thread.java:1019)

8
задан Zamani 20 July 2012 в 07:30
поделиться