Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BlueTooth Connection, не могу разобраться в проблеме 
:(
    Опции темы
Выхухоль
Дата 10.5.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 9.10.2008
Где: Ташкент

Репутация: 2
Всего: 2



Вообщемто все бонально, сделал класс для соединения с блютуз принтером и передачи на нго данные, но при соединении или при вызове метода GetConnectionURL, выскакивает окошко подтверждения соединения с принтером, но ровно на одну секунду а потом оно закрывается...это раз...потом если я ввожу пароль (то бишь успеваю нажать на accept в окошке , то через две секунды пока я даже его не ввел, вылезает сообщение что Pairing failed и все)
вот код моего сласса, может подскажете что я не так делаю..
Код

package hello;



import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;

/**
 *
 * @author palexandr
 */
public class BtConn implements DiscoveryListener,Runnable {

    Form form;
    List list;
    Vector devices, services;
    boolean sear = false;
    MIDlet parent;
    private LocalDevice local;
    private DiscoveryAgent agent;
    private StreamConnection sc;
    private InputStream is;
    private OutputStream os;
    private String url;
    private boolean connectedPRN = false;
    private static boolean checking = false;
    private final static byte[] CMD_INIT = {0x1B, 0x40};
    private final static byte CMD_PRN_NULL = 0x00;
    private final static byte CMD_PRN_RET = 0x0C;
    private final static byte CMD_PRN_RET_LN = 0x0A;

    //private ResourceReactor rr;

/*    public BtConn(String url) {
        try {
            local = LocalDevice.getLocalDevice();
            agent = local.getDiscoveryAgent();
            queFindDevices();
            while (sear) {
            }
            this.url = url;
        } catch (BluetoothStateException ex) {
            ex.printStackTrace();
        }
    }

    public boolean connPRN() {
        return connectedPRN;
    }*/

    public boolean isCheckedPRN() {
        return checking;
    }

    public boolean checkConn(String Url) {
        try {
            System.out.println("Connect to " + url);
            sc = (StreamConnection) Connector.open("btspp://" + Url + ":1");
            is = sc.openInputStream();
            System.out.println("Test input stream");
            os = sc.openOutputStream();
            System.out.println("Test output stream");
            os.write(CMD_INIT);
            os.flush();
            is.close();
            os.close();
            sc.close();
            connectedPRN = true;
            checking = true;
            return true;
        } catch (Exception ex) {
            ex.printStackTrace();
            connectedPRN = false;
            checking = true;
            return false;
        }
    }
List Servises = null;
    public BtConn(List list,List sevises1,MIDlet parent) {
        thr = new Thread(this);
        this.list = list;
        this.parent = parent;
        Servises = sevises1;
    }

    public Vector getFindDevice() {
        return devices;
    }

    public void SearchServices()
    {
        try
        {
            servicerecords = new Vector();
            UUID[] uidset  = new UUID[1];
            UUID uid = new UUID(0x003);
            uidset[0] = uid;
          RemoteDevice dev =   (RemoteDevice)devices.elementAt(list.getSelectedIndex());
          agent.searchServices(null, uidset, dev, this);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }


    public void FindDevices() {
        try {
         //  parent.switchDisplayable(null, parent.getFormLoading());
         //  parent.getGuage().setValue(0);

            devices = new Vector();
            services = new Vector();
            local = LocalDevice.getLocalDevice();
            agent = local.getDiscoveryAgent();
            //parent.getGuage().setValue(10);
            agent.startInquiry(DiscoveryAgent.GIAC, this);
        } catch (Exception e) {
            form.append(getStrCenterLay(e.getMessage()));
            sear = false;
        }
    }

/*    public void queFindDevices() {
        try {
            devices = new Vector();
            services = new Vector();
            agent.startInquiry(DiscoveryAgent.GIAC, this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/

    public static StringItem getStrCenterLay(String str) {
        StringItem sit = new StringItem(null, str);
        sit.setLayout(StringItem.LAYOUT_CENTER);
        return sit;
    }

  /*  public void setUsedDevice(int numDev) {
        try {
            String addr = ((RemoteDevice) devices.elementAt(list.getSelectedIndex())).getBluetoothAddress();
            sc = (StreamConnection) Connector.open("btspp://" + addr + ":1");
        } catch (Exception ex) {
            form.deleteAll();
            form.append(ex.getMessage());
        }
    }*/

    public void printCheque(String prnURL) {
         String [] header= null;
         try {
           header=new String[]{"================================\r\n","Company"+"\r\n","================================\r\n"};
            sc = (StreamConnection) Connector.open("btspp://" + prnURL + ":1;authenticate=true");
            wait(1500);
            is = sc.openInputStream();
            os = sc.openOutputStream();
            os.write(CMD_INIT);
            os.write(header[0].getBytes());
            os.write(header[1].getBytes());
            os.write(header[2].getBytes());
           // os.write(XMLRPC.USING.Constants.BT_Printing_TEXT.getBytes());
            os.write(CMD_PRN_RET_LN);
            os.flush();
            is.close();
            os.close();
            sc.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
      //   parent.switchDisplayable(null, parent.getListServices());
    }

    public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) {
        devices.addElement(remoteDevice);
      //  parent.getGuage().setValue(parent.getGuage().getValue()+20);
    }

    Vector servicerecords = null;
    public void servicesDiscovered(int arg0, ServiceRecord[] arg1) {
servicerecords.copyInto(arg1);
    }

    public void serviceSearchCompleted(int arg0, int arg1) {
switch(arg1)
{
    case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
        for(int i=0;i<servicerecords.size();i++)        {
            
            Servises.append(((ServiceRecord)servicerecords.elementAt(i)).toString(), null);
             
        }
        break;
    case DiscoveryListener.SERVICE_SEARCH_ERROR: Servises.append("SERVICE_SEARCH_ERROR",null);break;
    case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:Servises.append("SERVICE_SEARCH_NO_RECORDS",null);break;
    case DiscoveryListener.SERVICE_SEARCH_TERMINATED:Servises.append("SERVICE_SEARCH_TERMINATED",null);break;

}
    }

    public void inquiryCompleted(int param) {
        switch (param) {
            case DiscoveryListener.INQUIRY_COMPLETED:
                //Inquiry completed normally
                list.deleteAll();
                if(devices.size()>0){
                for (int x = 0; x < devices.size(); x++) {
                    try {
                        String device_name = ((RemoteDevice) devices.elementAt(x)).getFriendlyName(false);
                        list.append(((RemoteDevice) devices.elementAt(x)).getFriendlyName(true), null);

                        System.out.println("Device: " + device_name);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
               // parent.getGuage().setValue(100);
              //  parent.switchDisplayable(null, list);
                sear = false;}
                else
                {
                   // parent.getAlert().setString("Ни одного устройства не найдено");
                   // parent.switchDisplayable(parent.getAlert(), parent.getListServices());
                }
                break;
            case DiscoveryListener.INQUIRY_ERROR:       // Error during inquiry
               // parent.getAlert().setString("Ошибка при поиске");
                 //   parent.switchDisplayable(parent.getAlert(), parent.getListServices());
                sear = false;
                break;
            case DiscoveryListener.INQUIRY_TERMINATED:  // Inquiry terminated by agent.cancelInquiry()
              //  parent.getAlert().setString("Поиск отменен");
               //     parent.switchDisplayable(parent.getAlert(), parent.getListServices());
                sear = false;
                break;
        }
    }

    public void SetDefaultDeviceAndPrintText(int Index)
    {
        url = ((RemoteDevice) devices.elementAt(Index)).getBluetoothAddress();
        //if(checkConn(url))
            printCheque(url);
    }
Thread thr = null;
    public void run() {     
      thr.start();
      
        try {
            devices = new Vector();
            services = new Vector();
            sear = true;
            //FindDevices();
        } catch (Exception ex) {
            ex.printStackTrace();
            form.append(getStrCenterLay(ex.getMessage()));
        }
    }



}




Это сообщение отредактировал(а) Выхухоль - 23.5.2009, 14:47
PM MAIL ICQ   Вверх
Dummy
Дата 11.5.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



А почему в методе printCheque URL хардкодится как "btspp://" + prnURL + ":1;authenticate=true"? Не лучше ли взять этот урл из найденного ServiceRecord:
Код

String url = sr.getConnectionURL(ServiceRecord.AUTHENTICATE_NOENCRYPT, false);

Заодно можно поиграться с первым параметром, попробовав подставить: ServiceRecord.AUTHENTICATE_NOENCRYPT, ServiceRecord.NOAUTHENTICATE_NOENCRYPT, ServiceRecord.AUTHENTICATE_ENCRYPT.
PM MAIL   Вверх
g-r-i-n
Дата 22.5.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.12.2003
Где: Киев

Репутация: 2
Всего: 3



Нет времени читать весь код, но кажется этот глюк можно удалить таким способом (взято и WTK-демки):

.......

        try {
            discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
        } catch (BluetoothStateException e) {
            System.err.println("Can't start inquiry now: " + e);
            return true;
        }

        try {
            wait(); // until devices are found
        } catch (InterruptedException e) {
            System.err.println("Unexpected interruption: " + e);

            return false;
        }

.......

    /**
     * Invoked by system when device discovery is done.
     * <p>
     * Remember the discType
     * and process its evaluation in another thread.
     */
    public void inquiryCompleted(int discType) {
        this.discType = discType;

        synchronized (this) {
            notify();
        }
    }

PM MAIL WWW ICQ   Вверх
Выхухоль
Дата 24.5.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 9.10.2008
Где: Ташкент

Репутация: 2
Всего: 2



Цитата(g-r-i-n @  22.5.2009,  16:13 Найти цитируемый пост)
 try {
            wait(); // until devices are found
        } catch (InterruptedException e) {
            System.err.println("Unexpected interruption: " + e);

            return false;
        }

 это находится внутри synchronized (this)  или нет?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1205 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.