23

有没有办法使用 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 版本等)以及测试结果,我将更新包括您的数据在内的问题。

4

4 回答 4

4

我编写了一个示例应用程序来测试提供的答案。不幸的是它对我不起作用,所以我认为这个问题没有完全回答。

于 2011-08-17T10:19:44.077 回答
3

我认为 Android 支持 OPP。在 android/packages/apps/Bluetooth/...../opp/*.java 中有一条路径

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

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

于 2012-10-22T06:56:30.920 回答
2

没有用于访问 OBEX 的公共 API。关于为什么没有 API - Google 最清楚 :)

于 2011-04-07T18:33:15.137 回答
0

有人说它在某些三星手机上运行良好,但在其他三星手机上不行。然后我用“BluetoothShare”写了一个简单的测试程序,并请朋友借我手机测试...

  1. 它不能在 HTC Incredible 中工作
  2. 它可以在索尼爱立信 Xperia arc S 中运行

因此,我认为有些手机不兼容这些 BluetoothShare 代码......

于 2012-03-09T08:10:00.560 回答