在我的应用程序中,我将PDF文件下载到内部存储器。在此之后,我想发送带有该文件的邮件。我看到文件已下载到内部存储器中 com.my.app - >文件 - > pdffile.pdf 它有权限-rw -------
当我附上邮件文件并发送Gmail时说:无法发送附件。但为什么 ??我有许可
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
这是下载文件的代码。它在异步任务中运行
public static boolean saveFile(String fileName, Context context){
String fileDirectory = context.getFilesDir().getAbsolutePath()
+ "//"+fileName;
String urlServ = Constants.serverUrl+ "upload/forms/"+fileName;
urlServ = urlServ.replace(" ", "%20");
urlServ = urlServ.replace("\n", "%0d");
urlServ = urlServ.replace("\"", "%22");
int count;
URI fUri = URI.create("file://" + fileDirectory);
File f = new File(fileDirectory);
if (f.exists()){
f.delete();
}
try {
URL url = new URL(urlServ);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(fileDirectory);
//OutputStream output = context.openFileOutput(fileDirectory, Context.MODE_PRIVATE);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
return false;
}
return true;
}
这是发送邮件的代码:
public static void sendMail(Context context, String filename) {
String fileDirectory = context.getFilesDir().getAbsolutePath()
+ "/"+filename;
File f = new File(fileDirectory);
Uri URI =Uri.fromFile(f);
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"mytestmail@gmail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_STREAM, URI);
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
context.startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(context, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
}
有什么问题?它仅使用主题和文本打印邮件...可能存在一些权限问题。我怎样才能下载文件并赋予其完全权限
编辑:
这是许可问题,因为当我从同一目录发送具有不同权限的文件时,正在发送带附件的邮件。 -rw-rw-rw-拥有此权限
我如何下载文件并设置-rw-rw-rw-权限?
答案 0 :(得分:0)
此处的问题是,虽然您的应用具有阅读文件的权限,但电子邮件应用程序无权读取该文件。从Jelly Bean开始,当您尝试在应用程序外共享文件URI时,StrictMode会发出警告,因为在与您共享文件的应用程序无权访问该文件时,可能会出现此类问题。建议在应用程序之间共享文件而不是content://
URI时使用file://
URI。
我建议使用FileProvider类,它提供了一种使用content://
URI共享文件的相对简单的方法。
答案 1 :(得分:0)
如果有人面临同样的问题,我已经解决了这个问题。像这样打开OutputStream时 它给出了新的文件权限-rw-rw-rw。和其他应用程序(在这种情况下为Gmail)可以使用它。
OutputStream output = context.openFileOutput( fileName, Context.MODE_WORLD_READABLE);