在我的应用程序中,我下载PDF文件到内部存储。在此之后,我想发送邮件与文件。我看到文件被下载到内存里了Com.my.app -> files-> pdfffile .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- permission ??
如果有人面临同样的问题,我已经解决了这个问题。当像这样打开OutputStream时它赋予新文件权限-rw-rw-rw。和其他应用程序(这里是Gmail)都可以使用它。
OutputStream output = context.openFileOutput( fileName, Context.MODE_WORLD_READABLE);
这里的问题是,尽管你的应用程序有读取文件的权限,但电子邮件应用程序没有读取文件的权限。自从果冻豆以来,当你试图在应用程序外部共享文件URI时,StrictMode会产生警告,因为这种问题可能发生在你正在与之共享文件的应用程序没有访问该文件的权限时。在应用程序之间共享文件时,建议使用content://
URI,而不是file://
URI。
我建议使用FileProvider类,它提供了一种相对简单的方法来使用content://
URI共享您的文件。