使用蓝牙 OBEX 对象推送配置文件 (OPP) 发送文件 [英] Sending a File using Bluetooth OBEX Object Push Profile (OPP)

查看:43
本文介绍了使用蓝牙 OBEX 对象推送配置文件 (OPP) 发送文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有什么方法可以使用 OBEX 使用 android 蓝牙 API 发送文件?

Is there any way to send a file using the android bluetooth API using OBEX?

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

I need to send a file to a printer that supports OBEX OPP only.

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

I can send the file using the android intent ACTION_SEND to the printer with no problems, but I'd need to send it programmatically..

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

I can connect to the bluetooth printer using OBEX OPP UUID (1105) with the method createRfcommSocketToServiceRecord(), but then I should follow obex specifications to send a file using OBEX.. it isn't as simple as writing bytes to the output socket..

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

But if the intent ACTION_SEND can handle this, why there isn't any api for developers to send the files?

我也检查了一些第三方库,比如 BlueCove,但我还是没有让它工作..(Nexus One 和 Galaxy Tab 抛出一个异常,说本地库 bluecove_armv71 不可用.. LG Optimus One 说 bluecove_armv61 不可用..)

I also checked some third party libs like BlueCove, but I still didn't get it to work.. (Nexus One & Galaxy Tab throw an exception saying that native library bluecove_armv71 isn't available.. and LG Optimus One says that bluecove_armv61 isn't available..)

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

i'm stuck, any ideas?

工作解决方案

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

For anyone trying to send a file to a bluetooth device with no luck, I provide a working solution using content providers (thanks to KPBird):

此处<获取Java类BluetoothShare/a>

然后,以下代码将 SD 卡上的文件发送到蓝牙设备:

Than, the following code sends a file on the SD card to a bluetooth device:

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);

更新

有些人在使用上述解决方案时遇到问题,已经在以下设备上进行了测试:

Some people are experiencing problems with the solution above, it has been tested on the following devices:

适用于:

  • LG Optimus One(Android 2.1)
  • HTC Desire(安卓 2.2)
  • Google Nexus One(Android 2.2 和 2.3)
  • 三星 Galaxy S2(Android 4.0.3)
  • HTC Amaze(安卓 2.3.4)

有以下问题:

  • LG P500(安卓 2.3.3)
  • Galaxy TAB P500 (Android 2.2)
  • Google Nexus S(Android 4.1.2)

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

If you are able to test this snippet on devices which are not listed above, please provide the details of the devices (brand, name, android version, etc..) with which you tested it, and the test results, in a comment below, I will update the question including your data.

推荐答案

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

I've written a sample application to test the answer provided. Unfortunately it doesn't work for me, so I think this question is not completely answered.

这篇关于使用蓝牙 OBEX 对象推送配置文件 (OPP) 发送文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆