【问题标题】:Sending multiple files through Bluetooth通过蓝牙发送多个文件
【发布时间】:2012-02-14 23:16:21
【问题描述】:

我看到了您关于通过蓝牙发送文件的答案。 (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次!!

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

非常感谢您!

【问题讨论】:

    标签: android sockets bluetooth file-transfer obex


    【解决方案1】:

    嗯,这可以通过以下方式完成。 让要发送的文件列表用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,将发送文件列表。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      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 用户绝对厌恶的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-27
        • 2011-09-01
        • 1970-01-01
        • 2011-02-23
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多