2011-04-07 139 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代码兼容...