2012-06-07 119 views
1

我有一個要求,列出藍牙上的所有可用設備,並從android設備共享任何文件到選定的設備。我試圖用下面的代碼Android通過藍牙共享文件

private void sharefile(String deviceAddress,String filePath){ 
     File f = new File(filePath); 
     BluetoothAdapter objBluetoothAdapter = BluetoothAdapter 
         .getDefaultAdapter(); 

       BluetoothDevice device = objBluetoothAdapter 
         .getRemoteDevice(deviceAddress); 
       Log.v("Device", "" + device.getName()); 

       final UUID uuid = UUID 
         .fromString("00001101-0000-1000-8000-00805F9B34FB"); 

       try { 
        byte[] buffer = new byte[(int) f.length()]; 
        FileInputStream fis = new FileInputStream(f); 
        BufferedInputStream bis = new BufferedInputStream(fis); 
        bis.read(buffer, 0, (int) f.length()); 

        BluetoothSocket socket = device 
          .createRfcommSocketToServiceRecord(uuid); 

        OutputStream os = socket.getOutputStream(); 
        os.write(buffer, 0, buffer.length); 
        os.flush(); 
        os.close(); 
        socket.close(); 
       } catch (SecurityException e) { 
        e.printStackTrace(); 
       } catch (IllegalArgumentException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

    } 

在執行上面的代碼示出了交通運輸端點未連接上的logcat消息。

06-11 18:26:49.960:W/System.err(9812):java.io.IOException:傳輸端點未連接 06-11 18:26:49.960:W/System.err( 9812):at android.bluetooth.BluetoothSocket.writeNative(Native Method) 06-11 18:26:49.960:W/System.err(9812):在android.bluetooth.BluetoothSocket.write(BluetoothSocket.java:346) 06-11 18:26:49.960:W/System.err(9812):在android.bluetooth.BluetoothOutputStream.write(BluetoothOutputStream.java:85) 06-11 18:26:49.960:W/System.err(9812 ):at com.cit.bt.ShareMessageActivity.connectDevice(ShareMessageActivity.java:138) 06-11 18:26:49.960:W/System.err(9812):at com.cit.bt.ShareMessageActivity.shareFile(ShareMessageActivity .java:83) 06-11 18:26:49.960:W/System.err(9812):at com.cit.bt.ShareMessageActivity.onListItemClick(ShareMessageActivity.java:73) 06-11 18:26:49.960:W/System。 err(9812):at android.app.ListActivity $ 2.onItemClick(ListActivity.java:319) 06-11 18:26:49.960:W/System.err(9812):at android.widget.AdapterView.performItemClick(AdapterView .java:284) 06-11 18:26:49.960:W/System.err(9812):at android.widget.ListView.performItemClick(ListView.java:3736) 06-11 18:26:49.960:W /System.err(9812): at android.widget.AbsListView $ PerformClick.run(AbsListView.java:1974) 06-11 18:26:49.960:W/System.err(9812):at android.os.Handler .handleCallback(Handler.java:587) 06-11 18:26:49.960:W/System.err(9812):at android.os.Handler.dispatchMessage(Handler.java:92) 06-11 18:26 :4 9.960:W/System.err(9812):at android.os.Looper.loop(Looper.java:130) 06-11 18:26:49.960:W/System.err(9812):at android.app。 ActivityThread.main(ActivityThread.java:3687) 06-11 18:26:49.960:W/System.err(9812):at java.lang.reflect.Method.invokeNative(Native Method) 06-11 18:26 :49.960:W/System.err(9812):at java.lang.reflect.Method.invoke(Method.java:507) 06-11 18:26:49.960:W/System.err(9812):at com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867) 06-11 18:26:49.960:W/System.err(9812):at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:625) 06-11 18:26:49.960:W/System.err(9812):at dalvik.system.NativeStart.main(Native Method)

並試圖使用下面的替代代碼來連接設備,它連接設備但未能傳輸文件。

BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter() 
       .getRemoteDevice(deviceAddress); 
     Method m; 

      m = hxm.getClass().getMethod("createRfcommSocket", 
        new Class[] { int.class }); 
      BluetoothSocket socket = (BluetoothSocket) m.invoke(hxm, 
        Integer.valueOf(1)); 
      socket.connect(); 

我也在android manifest中提供了必要的權限,但它沒有連接。 任何人都可以幫助我解決這個問題。

你能給我提供Android市場中藍牙文件傳輸背後的邏輯嗎?

謝謝!

回答

0

藍牙HMX設備不會碰巧是一個心率監測器嗎? 無論哪種方式,我們發佈了一個很好的例子(源於谷歌藍牙聊天的例子)。它比示例更簡單一些,希望你會發現它有幫助。

http://ww2.cs.fsu.edu/~sposaro/mobile/resources/BeatConnect.zip

+0

謝謝您的回答...我不希望像客戶端 - 服務器模塊兩個設備上安裝應用程序。你能否提供我樣本來檢測附近的藍牙設備和共享文件。沒有客戶端 - 服務器模塊。就像從Android市場轉移藍牙文件一樣。 –

+0

你把藍牙設備與android設備配對了嗎? – Proxy32

+0

是的。對不起,我不記得一切如何發生。我知道我提供的代碼與BlueTooth HeartRate監視器設備連接。 –