2010-09-02 48 views
0

我正在嘗試將一個java應用程序重製爲android應用程序,但我無法使其工作。該應用程序旨在與使用OBEX Push的設備通話。設備不能接收任何傳入連接,並且沒有用戶界面,但有一些LED。使用OBEX的Android RFComm推不工作

Java代碼片斷我想重拍是以下幾點:

LocalDevice local; 
local = LocalDevice.getLocalDevice(); 
local.setDiscoverable(DiscoveryAgent.LIAC); 
String sConnectionURL = "btspp://localhost:" + myUUID + ";name=" + obexName; 
this.server = (StreamConnectionNotifier) Connector.open(sConnectionURL); 

我不是Java專家,但據我所知,這個段應註冊名爲obexName的SPP服務,並開始通過UUID myUUID監聽傳入連接。這按預期工作。

當設備與運行java midlet的手機配對時,它會設置一些信息發送給帶有手機UUID的SPP,或根本不發送。如果在配對期間無法找到帶有UUID的任何SPP,則會嘗試使用正常的OBEX連接到電話。

這是我無法在Android手機上工作的技術,既不是HTC Hero也不是HTC Desire,它們都具有2.1-update1版本。無論我如何嘗試,手機只能連接到手機,而不是根據需要連接到應用程序。

我創建的類很像例如在developer.android.com:

private class AcceptThread extends Thread 
{ 
    private final BluetoothServerSocket __serverSocket; 

    public AcceptThread() 
    { 
     BluetoothServerSocket tmpSocket = null; 

     trace("Creating AcceptThread"); 
     try 
     { 
      trace("Starting to listen"); 
      tmpSocket = _bluetoothAdapter.listenUsingRfcommWithServiceRecord(obexName, myUUID); 
      trace("Listening successful"); 
     } 
     catch (Exception e) 
     { 
      trace("Listening NOT successful"); 
      // TODO: handle exception 
     } 
     __serverSocket = tmpSocket; 
     trace("AcceptThread created"); 
    } 

    public void run() 
    { 
     BluetoothSocket socket = null; 
     trace("AcceptThread started"); 
     while(true) 
     { 
      try 
      { 
       trace("Waiting for socket acceptance"); 
       socket = __serverSocket.accept(); 
       trace("Socket accepted"); 
      } 
      catch (Exception e) 
      { 
       trace("Error when accepting socket: " + e.getLocalizedMessage()); 
       break; 
       // TODO: handle exception 
      } 
      if (socket != null) 
      { 
       synchronized (BTTransfer.this) 
       { 
        trace("Socket exists"); 
        try 
        { 
         __serverSocket.close(); 
         trace("Socket successfully closed"); 
        } 
        catch (Exception e) {} 
        break; 
       } 
      } 
      trace("Socket does not exist"); 
     } 
    } 

    public void cancel() 
    { 
     try 
     { 
      __serverSocket.close(); 
     } 
     catch (Exception e) {} 
     trace("AcceptThread cancelled and Socket successfully closed"); 
    } 
} 

評論有關的代碼:
跟蹤功能同步功能饋送文本到Handler對象,給UI信息。
應用程序故意沒有做任何事情,但在成功連接後關閉連接。
該應用程序達到「等待套接字接受」,但從未追蹤過。

我有一個可以僞裝成設備的PC .NET應用程序,並且通過使用正確的UUID,它可以完美地工作,但是PC已經與電話配對,並且沒有聲稱它應該發送正常的OBEX如果找不到指定的OBEX。

我一直在這個工作好幾天,不能想出一個解決方案。有沒有人有任何想法?

由於提前,
/Trygg


隨着我的意思是繼第二條消息:

當設備手機的通訊錄,有在下拉菜單中選擇一個通知,告訴一個設備正在聯繫。幾秒鐘後(取決於文件大小)傳輸文件,並且有第二個通知告訴文件被傳輸。這是第二個「消息」。

因爲我聽從設備斷開連接,然後客戶通過我的程序已經知道文件被傳輸,這第二個通知是完全無用的。但是,每次設備將文件發送到手機時都會出現。

在我們對傳奇和英雄的測試中,我們從來沒有來到第二次通知。這是電話失敗的地方。第一個通知來了,然後什麼都沒有,並且設備在幾秒鐘後返回一個錯誤。

希望這有助於澄清我的意思。

/Trygg


我沒有得到這個工作,但做排序的一種解決方法。我在事件BluetoothDevice.ACTION_ACL_DISCONNECTED上註冊一個BroadcastReceiver,然後檢查哪個設備已斷開連接。如果它是「我的」,我搜索藍牙收件箱中的文件。

我從設備製造商那裏得到一條消息,說它現在還不能工作,但他們正在開發新的固件。這就是爲什麼我沒有在這裏活躍,也沒有爲更好的解決方案工作。

+0

我已經有了這個中等成功:http://stackoverflow.com/a/14135187/530513 – 2013-01-09 03:50:37

回答

0

可以肯定的是,您是否在Android清單中設置了正確的權限?

+0

是的,我做了,或者至少我是這麼認爲的。我認爲如果它與PC一起工作,它應該是正確的? – 2010-09-02 11:05:21