有没有办法使用 OBEX 使用 android 蓝牙 API 发送文件?
我需要将文件发送到仅支持 OBEX OPP 的打印机。
我可以使用 android 意图 ACTION_SEND 将文件发送到打印机没有问题,但我需要以编程方式发送它..
我可以使用 OBEX OPP UUID (1105) 和方法 createRfcommSocketToServiceRecord() 连接到蓝牙打印机,但是我应该遵循 obex 规范使用 OBEX 发送文件。它不像将字节写入输出套接字那么简单。 .
但是如果意图 ACTION_SEND 可以处理这个问题,为什么没有任何 api 供开发人员发送文件?
我还检查了一些第三方库,如 BlueCove,但我仍然没有让它工作..(Nexus One 和 Galaxy Tab 抛出一个异常,说本机库 bluecove_armv71 不可用.. LG Optimus One 说 bluecove_armv61 不可用'不可用..)
我被卡住了,有什么想法吗?
工作解决方案
对于任何试图将文件发送到蓝牙设备但运气不佳的人,我提供了一个使用内容提供程序的工作解决方案(感谢 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);
更新
有些人在使用上述解决方案时遇到问题,已在以下设备上进行了测试:
适用于:
- LG 擎天柱一号 (Android 2.1)
- HTC Desire (Android 2.2)
- 谷歌 Nexus One(Android 2.2 和 2.3)
- 三星 Galaxy S2 (Android 4.0.3)
- HTC 惊奇 (Android 2.3.4)
有以下问题:
- LG P500 (安卓 2.3.3)
- 银河 TAB P500 (Android 2.2)
- 谷歌 Nexus S (Android 4.1.2)
如果您能够在上面未列出的设备上测试此代码段,请在下面的评论中提供您测试它的设备的详细信息(品牌、名称、Android 版本等)以及测试结果,我将更新包括您的数据在内的问题。