使用蓝牙发送文件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… … –
- 它不能在macros达不可思议的工作
- 它可以在索尼爱立信Xperia弧S工作
因此,我认为有些手机与这些蓝牙共享代码不兼容。