【发布时间】:2013-09-30 17:44:51
【问题描述】:
我将文件写入 SD。我知道文件没问题,因为使用 ASTRO 应用程序或 Gmail 应用程序或 Yahoo 应用程序,我可以看到它,我也可以从他们那里附加它,但是当我尝试从我的应用程序附加文件时,情况就完全不同了。当我选择 gmail 或 yahoo 应用程序时,他们无法读取文件。但是,如果我选择默认应用程序,电子邮件将正确发送并附上文件。
这是我的代码。谢谢!!
AndroidManifest 内部 使用权限 android:name="android.permission.WRITE_EXTERNAL_STORAGE"
我在哪里制作文件
File ruta_sd = Environment.getExternalStorageDirectory();
File f;
// Creo la carpeta;
File folder = new File(ruta_sd.getAbsolutePath() + "/Torno");
folder.mkdirs();
f = new File(ruta_sd.getAbsolutePath() + "/Torno/","Torno.xml");
// Just trying
f.canRead();
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(f));
fout.write(c); <-- c is a String in xml format
// Just trying
fout.flush();
fout.close();
现在,我尝试附加它
String ruta = Environment.getExternalStorageDirectory().getPath() + "/Torno/Torno.xml";
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType(getMimeType(ruta));
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(ruta));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "el tema");
sendIntent.putExtra(Intent.EXTRA_TEXT, "el cuerpo del mensaje");
// Just trying
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(sendIntent, "Title:"));`
【问题讨论】:
-
请解释您所说的“无法读取文件”是什么意思。您收到了哪些具体的错误消息?另外,当您不使用
ContentProvider时,为什么还要包括FLAG_GRANT_READ_URI_PERMISSION?您可能还希望考虑使用sync():android-developers.blogspot.com/2010/12/saving-data-safely.html -
您好,感谢您的回答。我来自西班牙,消息是西班牙语的。我将尝试翻译它们。 Gmail 应用程序显示:“Se ha detenido la aplicación”是什么意思“应用程序已停止”。当我按下按钮发送它但文件在那里作为附件时会发生这种情况。雅虎应用程序说:“Acceso de lectura denegado。El archivo seleccionado no se puede leer”意思是“读取访问被拒绝。无法读取所选文件”。 FLAG_GRANT_....?我只是在尝试。我将阅读有关 sync() 的链接。谢谢。