我有完全一样的问题。因此,不要重复同一篇文章,我想向您展示我的代码,这与您的代码略有不同,但仍会发送一封带有 0KB 附件的电子邮件。
我在日志中打印 2 条消息:
打印路径(我编辑了包名)
文件大小不是0KB!!!
05-11 11:32:58.133: W/Log Viewer(432): Path is /data/data/<package>/files/LogCat.log.gzip
05-11 11:32:58.192: W/Log Viewer(432): The file is 504 bytes
我用 Eclipse 调试器在代码中停下来并检查了 uriLog:它不是 null 并且包含正确的路径。
代码是:
public void run() {
Uri uriLog = null;
try {
FileOutputStream out = openFileOutput("LogCat.log.gzip", Context.MODE_PRIVATE);
out.write(gzip(dump().getBytes()));
out.close();
File gzipFile = new File(getFilesDir(), "LogCat.log.gzip");
//uriLog = Uri.parse("file://" + getFilesDir() + "/LogCat.log.gzip");
uriLog = Uri.fromFile(gzipFile);
Log.w(TAG,"Path is " + uriLog.getPath());
Log.w(TAG,"The file is " + gzipFile.length() + " bytes");
}
catch (IOException e) {
e.printStackTrace();
}
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Android Log");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, dump());
emailIntent.putExtra(android.content.Intent.EXTRA_STREAM, uriLog);
try {
String str = getResources().getString(R.string.send_prompt);
Intent chooser = Intent.createChooser(emailIntent, str);
startActivity(chooser);
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
我尝试过的事情:
我通过解析创建了 uri(见注释行
我还将数据放在电子邮件正文中以检查它是否存在 --> 它到达电子邮件中
我还尝试将压缩后的数据放入电子邮件正文中以检查它是否存在 --> 它到达了电子邮件
编辑:
试图从 /mnt/system/app/CustomLocale.apk 发送一个预先存在的文件,从 /mnt/system/app/CustomLocale.apk
23745 字节 uriLog.getPath() 的路径被打印 /apk/CustomLocale.apk
并且邮件仍然带有一个名为的附件CustomLocale.apk 和 0KB 大小
我唯一想到的失败是 putextra(intent.EXTRA_STREAM,uri) 是基于
public Intent putExtra (String name, Parcelable value)
uris实现了parcelable 接口。但是由于某种原因,我将调查,也许对writeToParcel(Parcel out, int flags)的调用没有将文件数据写出;这就是为什么它在附件中是 0KB 的原因。