【问题标题】:Sending a File using Bluetooth OBEX Object Push Profile (OPP)使用蓝牙 OBEX 对象推送配置文件 (OPP) 发送文件
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 喜欢您的方法,我将对其进行更改测试,如果找到它,会通知您有关修复的信息。
  • @Diego,我也从上面的链接中尝试了你的 sn-p。它不起作用。你能为我提供解决方案吗?
【解决方案2】:

我认为 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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 有关蓝牙文件传输和 Androbex 应用程序如何工作的任何线索?他们使用 OBEX OPP/FTP,但也许他们工作只是因为两个设备(发送方和接收方)都安装了应用程序..(这是可行的,但对于打印机等设备,我不知道它是否有效)
    • 你可以使用这个应用程序并将电子名片发送到打印机吗?行得通吗?从应用程序的描述来看 - 听起来它是通过 RFCOMM / SPP 套接字实现的 OBEX。还有其他应用程序需要双方使用相同的应用程序来发送/接收 - 最有可能使用 SPP 套接字。
    • 是的,我认为它是这样工作的,两个设备上的同一个应用程序,以及标准的套接字通信。因为使用公共 API,我可以使用 OBEX 协议连接到打印机,但是我可以从 io 流中写入和读取,就像通过 SPP 进行通信一样......所以将文件发送到打印机的唯一解决方案是使用标准的 ACTION_SEND 意图,真可惜..
    • 我从不尝试发送联系人。我研究了本机蓝牙应用程序并找到了上面的代码。我认为上面的代码应该适用于蓝牙打印机。
    • 我可以确认,使用 Androbex,我能够从三星 Galaxy S 将图像文件发送到我的柯达打印机(由 BT 加密狗启用的蓝牙)。我无法打印联系人不过。
    【解决方案4】:

    有人说它在某些三星手机上可以正常工作,但在其他三星手机上不行。然后我用“BluetoothShare”写了一个简单的测试程序,请朋友借我手机测试一下……

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 2012-04-19
      • 1970-01-01
      • 2010-12-06
      • 2011-02-23
      • 1970-01-01
      • 2012-01-01
      • 2018-09-03
      • 2012-03-31
      相关资源
      最近更新 更多