2011-04-07 103 views
22

是否有任何方式使用OBEX發送使用android bluetooth API的文件?使用藍牙OBEX對象推送配置文件(OPP)發送文件

我需要將文件發送到僅支持OBEX OPP的打印機。

我可以使用Android的意圖ACTION_SEND到沒有問題的打印機發送的文件,但我需要以編程方式發送..

我可以連接到使用OBEX OPP UUID藍牙打印機(1105)該方法createRfcommSocketToServiceRecord(),但後來我應該遵循OBEX規範發送使用OBEX文件..它是不是字節寫入到輸出插座一樣簡單..

但是,如果意向ACTION_SEND可以解決這個問題,爲什麼開發人員無法發送這些文件?

我也查了一些第三方庫像BlueCove,但我還是沒有 得到它的工作。(歌Nexus One &的Galaxy Tab拋出一個異常,說本機庫bluecove_armv71不可用..和LG擎天柱一說bluecove_armv61不可用..)

我卡住了,有什麼想法嗎?

工作液

對於任何人試圖將文件發送到藍牙設備沒有運氣,我提供使用內容提供商(感謝KPBird)工作方案:

抓住java類BluetoothSharehere

比,下面的代碼發送文件的SD卡上的藍牙設備:

BluetoothDevice device; 
String filePath = Environment.getExternalStorageDirectory().toString() + "/file.jpg"; 

ContentValues values = new ContentValues(); 
values.put(BluetoothShare.URI, Uri.fromFile(new File(filePath)).toString()); 
values.put(BluetoothShare.DESTINATION, device.getAddress()); 
values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND); 
Long ts = System.currentTimeMillis(); 
values.put(BluetoothShare.TIMESTAMP, ts); 
Uri contentUri = getContentResolver().insert(BluetoothShare.CONTENT_URI, values); 

UPDATE

有些人遇到上述解決方案的問題,已經對下列設備進行測試:

文選:

  • LG的Optimus One(Android 2.1版)
  • HTC Desire(Android 2.2)
  • 谷歌Nexus One(Android 2.2和2.3)
  • 三星Galaxy S2(安卓4.0.3)
  • HTC驚奇(安卓2.3.4)

有問題的:

  • LG P500(安卓2.3.3)
  • Galaxy TAB P500(Android 2.2)
  • 谷歌Nexus S(Android 4.1。2)

如果你能來測試上面沒有列出的設備這個片段中,請提供你測試了它的設備(品牌名稱,Android版本,等等)的細節,以及測試結果,在下面的評論中,我會更新包括您的數據在內的問題。

+5

您好ShadowCloud,在上面的代碼中,一旦contentUri填充,哪裏藍牙設備發生推??我沒有看到任何代碼... – 2011-06-01 06:28:28

+1

此代碼不適用於從4.1開始的操作系統 – Harish 2013-06-25 20:12:57

回答

2

沒有用於訪問OBEX的公共API。 關於爲什麼沒有API - Google知道最好:)

+0

關於應用程序Bluetooth File Transfer和Androbex如何工作的任何線索?他們使用OBEX OPP/FTP,但也許他們工作只是因爲兩個設備(發件人和接收器)都安裝了應用程序..(這是可行的,但對於打印機等設備,我不知道它是否有效) – BFil 2011-04-08 07:23:38

+1

您可以使用此應用程序併發送一個vcard到打印機?它工作嗎?從應用程序的描述 - 它聽起來像是通過RFCOMM/SPP套接字實現的OBEX。還有其他應用程序需要在雙方發送/接收相同的應用程序 - 這些應用程序最有可能使用SPP套接字。 – 2011-04-08 15:34:37

+1

是的,我認爲它的工作方式,兩個設備上的同一個應用程序和標準套接字通信。因爲使用公共API,我可以使用OBEX協議連接到打印機,但是我只需從io流寫入和讀取,就像通過SPP進行通信一樣......因此將文件發送到打印機的唯一解決方案是使用標準的ACTION_SEND意圖,真是太遺憾了。 – BFil 2011-04-08 16:55:10

3

我寫了一個sample application來測試提供的答案。不幸的是,它不適合我,所以我認爲這個問題沒有完全解答。

+0

喜歡你的方法我會測試它的變化,並會通知你有關修復,如果我會找到它。 – IamStalker 2011-11-14 20:27:16

+0

@ Diego,我也試過了上面鏈接的代碼片段。它不起作用。你可以爲我提供解決方案。 – 2012-06-13 13:22:22

0

有人說,它在一些三星手機中工作正常,但不適用於其他三星手機。然後我用「BluetoothShare」寫一個簡單的測試程序,並問我的朋友借我的手機來測試...

  1. 它不能在HTC不可思議的工作
  2. 它可以在索尼愛立信的Xperia弧的工作

因此,我認爲有些手機不能使用這些BluetoothShare代碼兼容...