通过蓝牙发送多个文件

时间:2012-01-20 11:16:53

标签: android sockets bluetooth file-transfer obex

我看到了关于通过蓝牙发送文件的答案。 (回答2011年6月13日5:01)

 Intent i = new Intent(Intent.ACTION_SEND); i.setType("image/jpeg");
 i.putExtra(Intent.EXTRA_STREAM, Uri.parse("/sdcard/file.jpg"));
 startActivity(Intent.createChooser(i, "Send Image"));

是的!有用。它将打开一个默认的蓝牙工具/窗口/对话框来发送文件。但是,请你教我如何发送更多文件?这是我的代码......

 String xFile[3] = { "aa.txt", "bb.txt", "cc.txt" };

 Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain");

 for (int i = 0; i < 3; i ++) { 
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(xFile[i]))); 
    startActivity(intent); 
 }

它可以工作,但它会打开默认的蓝牙工具/窗口/对话框3次! @@如果有10个文件,它将打开默认的蓝牙工具/窗口/对话框10次!!

我可以知道如何打开默认的蓝牙工具/窗口/对话框一次,然后发送所有文件吗?

非常感谢你!

2 个答案:

答案 0 :(得分:5)

嗯,这可以通过以下方式完成。 让要发送的文件列表由mMultiSelectData表示。

ArrayList<Uri> uris = new ArrayList<Uri>();
int length = mMultiSelectData.size();
Intent mail_int = new Intent();
mail_int.setAction(android.content.Intent.ACTION_SEND_MULTIPLE);
mail_int.setType("*/*");
for(int i = 0; i < length; i++) {
    File file = new File(mMultiSelectData.get(i));
    uris.add(Uri.fromFile(file));
}
mail_int.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
mContext.startActivity(mail_int);

这将打开一个选择框。选择Bluetooth,将发送文件列表。

答案 1 :(得分:1)

这是一个非常简单的练习,但需要付出代价! SDCard存储空间。

是的,您确实需要将多个文件转储到SDCard上。

对于转储到SDCard的每个文件,您需要建立一个Uri的数组列表。

ArrayList<Uri> listDumpedFileUris = new ArrayList<Uri>();
Uri uriFile = Uri.fromFile(new File(dumpedFilePath));
listDumpedFileUris.add(uriFile);

关键部分是明确告诉选择者必须能够通过授予读取权限来读取SDCard上的转储文件的意图,更重要的是,将数组列表添加到intent的额外parcelable包中。 / p>

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, listDumpedFileUris);
startActivity(Intent.createChooser(intent, "Send these files using..."));

然后,所有选定的文件将通过Android的蓝牙运行时工具发送。 顺便说一下,您可能必须明确指定文件的setType,例如image/jpeg,如下所示:

intent.setType("image/jpeg");

唯一的责任是清理SDCard文件系统的残余物,这在很大程度上是Android用户绝对厌恶的!