通过蓝牙发送多个文件

Art*_*ang 6 sockets android 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"));
Run Code Online (Sandbox Code Playgroud)

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

 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); 
 }
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢你提前!

Pan*_*hal 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);
Run Code Online (Sandbox Code Playgroud)

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


t0m*_*13b 1

这是一个非常简单的练习,但这是有代价的!SD卡存储空间。

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

对于转储到 SDCard 中的每个文件,您需要构建一个Uri.

ArrayList<Uri> listDumpedFileUris = new ArrayList<Uri>();
Uri uriFile = Uri.fromFile(new File(dumpedFilePath));
listDumpedFileUris.add(uriFile);
Run Code Online (Sandbox Code Playgroud)

关键部分是通过授予读取权限的方式明确告知选择器必须能够读取 SDCard 上转储的文件,更重要的是,将数组列表添加到 Intent 的额外可打包包中。

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..."));
Run Code Online (Sandbox Code Playgroud)

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

intent.setType("image/jpeg");
Run Code Online (Sandbox Code Playgroud)

你唯一的责任就是清理 SDCard 文件系统的残余物,而对于大多数 Android 用户来说,这是绝对讨厌的!