私はまったく同じ問題を抱えています。同じ投稿を複製しないように、私のコードをお見せしたいと思います。これはあなたのものとは少し異なりますが、それでも 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 を作成しました (コメント行を参照してください)
また、データが存在することを確認するためにメール本文内にデータを入れます->メールに届きます
私はまた、gzipされたデータを電子メールの本文に入れて、それが存在することを確認しようとしました->電子メールで到着しました
編集:
/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 になっています。