使用蓝牙OBEX对象推送配置文件(OPP)发送文件

时间:2011-04-07 07:31:56

标签: android file bluetooth send obex

有没有办法使用OBEX使用android bluetooth API发送文件?

我需要将文件发送到仅支持OBEX OPP的打印机。

我可以使用android意图ACTION_SEND将文件发送到打印机而没有任何问题,但我需要以编程方式发送它..

我可以使用方法createRfcommSocketToServiceRecord()使用OBEX OPP UUID(1105)连接到蓝牙打印机,但是我应该遵循obex规范使用OBEX发送文件..这不像写入字节到输出插座..

但是如果意图ACTION_SEND可以处理这个问题,为什么开发人员没有任何API发送文件?

我还检查了一些像BlueCove这样的第三方库,但我仍然没有 让它工作..(Nexus One& Galaxy Tab抛出异常,说本机库bluecove_armv71不可用..而且LG Optimus One说bluecove_armv61不可用..)

我被卡住了,有什么想法吗?

工作解决方案

对于任何试图将文件发送到蓝牙设备而没有运气的人,我使用内容提供商提供了一个有效的解决方案(感谢KPBird):

here

获取java class 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 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)

如果您能够在上面未列出的设备上测试此代码段,请提供您测试它的设备(品牌,名称,Android版本等)的详细信息和测试结果,在下面的评论中,我将更新包括您的数据的问题。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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

答案 2 :(得分:2)

没有用于访问OBEX的公共API。 关于为什么没有API - 谷歌最了解:)

答案 3 :(得分:0)

有人说它在某些三星手机上运行良好,但在其他三星手机中无效。然后我用“蓝牙共享”编写了一个简单的测试程序,并请我的朋友借我的电话进行测试......

  1. 它无法在HTC Incredible中使用
  2. 可以在SonyEricsson Xperia arc S
  3. 中使用

    因此,我认为部分手机与这些蓝牙代码不兼容......