12

デフォルトのメールアプリを使用するエミュレータでは、すべて正常に動作します。しかし、Gmailアプリを使用してヒーローから送信したメールを受信して​​いるときは、添付ファイルがありません。ヒーローのデフォルトのメールアプリは正常に動作します。

このコードをHeroのGmailアプリで機能させるにはどうすればよいですか?
以下のコードを見ることができます。

    private void startSendIntent() {
        Bitmap bitmap = Bitmap.createBitmap(editableImageView.getWidth(), editableImageView.getHeight(), Bitmap.Config.RGB_565);
        editableImageView.draw(new Canvas(bitmap));
        File png = getFileStreamPath(getString(R.string.file_name));
        FileOutputStream out = null;
        try {
            out = openFileOutput(getString(R.string.file_name), MODE_WORLD_READABLE);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) out.close();
            }
            catch (IOException ignore) {}
        }
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
        emailIntent.setType("image/png");
        startActivity(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)));
}

ログに次のように表示されます。

02-05 17:03:37.526: DEBUG/Gmail(11511): URI FOUND:file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.535: DEBUG/Gmail(11511): ComposeActivity added to message:0 attachment:|IMAG0001.jpg|image/jpeg|0|image/jpeg|LOCAL_FILE|file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg size:0
02-05 17:03:37.585: INFO/Gmail(11511): >>>>> Attachment uri: file:///sdcard/DCIM/100MEDIA/IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           type: image/jpeg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           name: IMAG0001.jpg
02-05 17:03:37.585: INFO/Gmail(11511): >>>>>           size: 0

答えてくれてありがとう。

4

3 に答える 3

32

私の場合、問題は次のコード行で解決されました。

Bitmap screenshot = Bitmap.createBitmap(_rootView.getWidth(), _rootView.getHeight(), Bitmap.Config.RGB_565);
_rootView.draw(new Canvas(screenshot));

String path = Images.Media.insertImage(getContentResolver(), screenshot, "title", null);
Uri screenshotUri = Uri.parse(path);

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
emailIntent.setType("image/png");

startActivity(Intent.createChooser(emailIntent, "Send email using"));

重要なのは、スクリーンショットをメディアライブラリに保存すると、そこからファイルを正常に送信できることです。

于 2010-07-16T20:16:53.587 に答える
7

getFileStreamPath()またはopenFileOutput()、他のアプリ(Gmailなど)からアクセスできないプライベートディレクトリにファイルを作成します。外部ストレージを使用して、公的にアクセス可能なファイルを作成します。

private static final int REQUEST_SHARE = 39714;

private File png = null;

private void startSendIntent() {
    png = new File(new File(Environment.getExternalStorageDirectory(), "Pictures"), getString(R.string.file_name));

    FileOutputStream out = null;
    try {
        out = new FileOutputStream(png);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) out.close();
        }
         catch (IOException ignore) {}
        }
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(png));
        emailIntent.setType("image/png");
        startActivityForResult(Intent.createChooser(emailIntent, getString(R.string.send_intent_name)), REQUEST_SHARE);
    }
}

これは、USBドライブとしてマウントされている場合など、外部ストレージが使用できない場合は機能しません。外部ストレージが使用可能かどうかの検出の詳細については、ストレージAPIガイドを参照してください。

最小APIレベルが8以上の場合は、Context.getExternalCacheDir()またはEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)を親ディレクトリとして使用できます。

を使用することにならない限りgetExternalCacheDir()、ユーザーのファイルの1つが誤って上書きされないように、必ず一意のファイル名を使用してください。

onActivityResult()最後に、共有操作が完了した後、オーバーライドしてファイルを削除できます。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(requestCode == REQUEST_SHARE) {
        if(this.png == null) {
            return;
        }

        this.png.delete();
    }
}
于 2013-05-20T05:54:19.590 に答える
2

同じ症状がありました。私の場合は、最初にアクセス許可を付けて添付ファイルを保存していたためMODE_PRIVATEです。変更するとすぐに、MODE_WORLD_READABLEGmailがファイルにアクセスして添付ファイルを適切に送信できるようになりました。私はあなたのコードスニペットであなたが使っていたのを見ますがMODE_WORLD_READABLE...奇妙です。

http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_READABLE

于 2013-03-02T22:40:21.990 に答える