【发布时间】:2015-01-15 04:08:56
【问题描述】:
这个问题之前已经发布过,但没有明确或可接受的答案,并且提供的所有应该“有效”的解决方案都不适合我。见这里:Gmail 5.0 app fails with "Permission denied for the attachment" when it receives ACTION_SEND intent
我有一个应用程序在文本文件中构建数据,需要通过电子邮件发送文本文件,并自动附加它。我尝试了很多方法来附加它,它显然适用于 Gmail 4.9 及更低版本,但 5.0 具有一些新的权限功能,使其无法执行我希望的操作。
Intent i = new Intent(Intent.ACTION_SEND);
String to = emailRecipient.getText().toString();
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
i.putExtra(Intent.EXTRA_SUBJECT, "Pebble Accelerometer Data");
i.putExtra(Intent.EXTRA_TEXT, "Attached are files containing accelerometer data captured by SmokeBeat Pebble app.");
String[] dataPieces = fileManager.getListOfData(getApplicationContext());
for(int i2 = 0; i2 < dataPieces.length; i2++){
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(getApplicationContext().getFilesDir() + File.separator + dataPieces[i2])));
}
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(getApplicationContext().getFilesDir() + File.separator + fileManager.getCurrentFileName(getApplicationContext()))));
Log.e("file loc", getApplicationContext().getFilesDir() + File.separator + fileManager.getCurrentFileName(getApplicationContext()));
try {
startActivity(Intent.createChooser(i, "Send Email"));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Main.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
数据片段可能是空的,但是 for 循环下方的当前文件行始终是可靠的并且总是附加一些东西。
我尝试过改变
Uri.fromFile()
到
Uri.parse()
当我这样做时,它会附加,但 Gmail 然后崩溃,当我检查 logcat 时,这是因为空指针。这很可能是因为 Gmail 无权访问该文件,因此结果为 null。
我也试过
getCacheDir()
而不是
getFilesDir()
它具有相同的结果。
我在这里做错了什么,我应该如何解决它?一些示例代码会非常非常方便,因为我是 Android 开发的新手,并且解释我需要做的事情可能不会有帮助。
非常感谢。
【问题讨论】:
标签: android android-intent permissions gmail