使用蓝牙发送文件OBEX对象推送configuration文件(OPP)

有什么办法使用OBEX发送一个文件使用android蓝牙API?

我需要将文件发送到仅支持OBEX OPP的打印机。

我可以使用Android意图ACTION_SEND发送文件到打印机没有问题,但我需要以编程方式发送它。

我可以用方法createRfcommSocketToServiceRecord()使用OBEX OPP UUID(1105)连接到蓝牙打印机,但是我应该按照obex规范使用OBEX发送一个文件..这并不像将字节写入输出套接字那么简单。 。

但如果意图ACTION_SEND可以处理这个,为什么开发人员没有任何api发送文件?

我也检查了像BlueCove一些第三方库,但我仍然没有得到它的工作..(Nexus One&Galaxy Tab抛出一个exception,说本地库bluecove_armv71不可用..和LG Optimus One说bluecove_armv61 isn没有可用..)

我卡住了,有什么想法?

工作解决scheme

对于任何试图将文件发送到蓝牙设备而没有运气的人,我提供了一个使用内容提供商的工作解决scheme(感谢KPBird):

从这里抓取java类的BluetoothShare

以下代码将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

有些人遇到上述解决scheme的问题,已经在以下设备上进行了testing:

适用于:

  • LG Optimus One(Android 2.1)
  • HTC Desire(Android 2.2)
  • Google Nexus One(Android 2.2和2.3)
  • 三星Galaxy S2(Android 4.0.3)
  • HTC Amaze(Android 2.3.4)

有问题:

  • LG P500(Android 2.3.3)
  • Galaxy TAB P500(Android 2.2)
  • Google Nexus S(Android 4.1.2)

如果您能够在上面未列出的设备上testing此代码段,请在下面的注释中提供您testing它的设备 (品牌,名称,Android版本等) 的详细信息以及testing结果,我会更新包括您的数据在内的问题。

我已经写了一个示例应用程序来testing提供的答案。 不幸的是,它不适合我,所以我觉得这个问题没有完全解答。

我认为在OPP中有Android支持。在android / packages / apps / Bluetooth /…../ opp / *中有一个path。

如果你的版本没有这个,我发现一个有用的链接,将有助于在Android中使用OBEX OPP。 这里需要Android框架修改。

http://i-miss-erin.blogspot.in/2009/10/how-to-have-obex-function-in-android.html

没有用于访问OBEX的公共API。 为什么没有API – Google知道最好的:)

有人说,在一些三星手机,它工作正常,但不适用于其他三星手机。 然后我用“蓝牙共享”写一个简单的testing程序,并要求我的朋友借我手机testing… … –

  1. 它不能在macros达不可思议的工作
  2. 它可以在索尼爱立信Xperia弧S工作

因此,我认为有些手机与这些蓝牙共享代码不兼容。