2017-09-21 46 views
0

我的工作对已经通过蓝牙使用下面的方法成功地共享一个生成的PDF文件中的Android应用程序:如何以编程方式在同一Android意图内共享不同MIME类型的多个文件?

public static void sharePdfFile(Context ctx, String pathAndFile) { 
    try { 
     Intent share = new Intent(Intent.ACTION_SEND); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("application/pdf"); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile)); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

我被要求包括在此分享意图第二个文件(CSV格式),因此这两个文件一起发送。  我立刻发现this question,其解决通过蓝牙发送多个文件,但仅使用相同的MIME类型的文件(“视频/ *”,在该示例。)

我已经发现大量的亚型通配符MIME的例子(“video/*”,“text/*”等),但在这一点上,我无法找到具有多个特定MIME类型集的示例(例如:“application/pdf”和“text /逗号分隔值”)。  所以,我创建了一个使用“*/*”作为MIME类型的测试方法,希望能够做到这一点。  不幸的是,我的测试方法甚至不足以激活蓝牙共享弹出窗口来选择附近的设备。

我不知道我在做什么错或遗漏了。  我似乎无法在调试时捕获任何错误,所以我认为我仍然错过了一些东西。  我知道PDF和CSV文件,因为这两个文件通过原始的方法精确发射各自的URI都OK(我改变了现有的方法来测试新的CSV文件的MIME类型和URI) 

这里是我的测试方法:

public static void shareTwoFilesTest(Context ctx, String pathAndFile, String pathAndFile2) { 
    try { 
     Intent share = new Intent(Intent.ACTION_SEND_MULTIPLE); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("*/*"); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile)); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile2)); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

回答

1

在我完成我的最终草稿后,我最终找到了正确的问题/问题的工作解决方案。  我在写作时一直在研究这个问题,发现this answer表明我在我的测试方法中缺少intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);。  我补充说,但我的测试方法仍然无法正常工作。

然后我发现this answer表示可能应该为我的意图添加一个URI的数组列表,而不是尝试添加多个单个URI。  将这个最终缺失的一块,我结束了一个工作测试功能,我现在可以实现正式后:

public static void shareTwoFilesTest(Context ctx, String pathAndFile, String pathAndFile2) { 

    ArrayList<Uri> Uris = new ArrayList<>(); 
    Uris.add(Uri.parse(pathAndFile)); 
    Uris.add(Uri.parse(pathAndFile2)); 

    try { 
     Intent share = new Intent(Intent.ACTION_SEND_MULTIPLE); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("*/*"); 
     share.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
     share.putExtra(Intent.EXTRA_STREAM, Uris); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

如果你觉得这个答案可以改善或有解决这个问题的另一种方式,请随时答案或评论,因为你认为合适。  我继续发布问题和答案,希望这可以帮助未来的其他人。

+0

谢谢,工作正常,共享多个文件 –

相关问题