【发布时间】:2011-07-31 10:52:41
【问题描述】:
有没有办法通过 OBEX 使用 android 蓝牙 API 发送文件?
我需要将文件发送到仅支持 OBEX OPP 的打印机。
我可以使用 android intent ACTION_SEND 将文件毫无问题地发送到打印机,但我需要以编程方式发送它..
我可以使用 OBEX OPP UUID (1105) 和方法 createRfcommSocketToServiceRecord() 连接到蓝牙打印机,但是我应该按照 obex 规范使用 OBEX 发送文件。输出插座..
但是如果intent ACTION_SEND 可以处理这个问题,为什么没有任何api 供开发人员发送文件?
我还检查了一些第三方库,例如 BlueCove,但我仍然没有 让它工作..(Nexus One 和 Galaxy Tab 抛出异常,说本机库 bluecove_armv71 不可用.. LG Optimus One 说 bluecove_armv61 不可用..)
我卡住了,有什么想法吗?
工作解决方案
对于任何尝试将文件发送到蓝牙设备但运气不佳的人,我提供了一个使用内容提供程序的可行解决方案(感谢 KPBird):
从here获取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)
- 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)
如果您能够在上面未列出的设备上测试此 sn-p,请提供您使用的设备的详细信息(品牌、名称、android 版本等)测试了它,测试结果,在下面的评论中,我会更新问题,包括你的数据。
【问题讨论】:
-
嗨ShadowCloud,在上面的代码中,一旦填充了contentUri,蓝牙设备推送发生在哪里?我没有看到任何代码......
-
从 4.1 开始,此代码无法在操作系统上运行
标签: android file bluetooth send obex