2

我的应用程序生成 kml (xml) 文件,我希望用户能够通过电子邮件、蓝牙或其他方式共享这些文件。我已经看过几十个例子,但显然我仍然做错了什么。如果我选择 Gmail,电子邮件会正确加载,但文件未附加。如果我选择蓝牙,蓝牙管理器会崩溃。我在这里做错了什么?

private void createShareIntent(String filename) {
    Log.d(Common.APP_TAG, "** Create share intent **");
  String mime = "text/plain";
    File exportFile = new File(filename);
    Log.d(Common.APP_TAG, Uri.fromFile(exportFile).toString());
    // logcat says : file:///mnt/sdcard/Android/data/com.gmail.qkzoo1978.qwhereami/files/exports/qExport_11-6-2012_1648.kml
    Intent intent = new Intent();
    intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"testing@gmail.com"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Test");
    intent.putExtra(Intent.EXTRA_TEXT, "Text");
    intent.setType(mime);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(exportFile));
    //intent.setDataAndType(Uri.fromFile(exportFile),  mime);
    startActivity(Intent.createChooser(intent, "Share Kml"));
}  
4

1 回答 1

0

不确定你是否解决了这个问题,但我这个周末遇到了同样的问题,并意识到这是因为我正在保存我的应用程序可以访问但其他应用程序没有的文件。因此,当用于处理共享的应用程序尝试读取文件时,权限被拒绝。奇怪的是,这在日志中并不清楚。

解决此问题的方法是将文件保存到外部存储中,这可能并不理想。

或者作为更好的解决方案,使用文件提供程序并在意图中授予权限。

于 2014-03-01T20:09:04.597 回答