在使用默认的邮件应用程序模拟器一切工作正常。但是,当我'接收我已经从使用Gmail应用我的英雄发送邮件我都没有重视。在英雄的默认邮件应用程序工作正常。

我怎样才能让这个代码工作与英雄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

感谢您的回答。

有帮助吗?

解决方案

有关我的问题用的下面几行代码解决:

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"));

关键的一点是,我节省了屏幕截图到媒体库,然后它可以成功地从那里发送文件。

其他提示

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(),请确保您使用唯一的文件名,以防止用户的文件的一个意外覆盖掉了。

最后,您可以覆盖onActivityResult()删除文件的共享操作完成后:

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

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

        this.png.delete();
    }
}

我有相同的症状。在我的情况,那是因为我最初保存与权限MODE_PRIVATE附件。当我把它改为MODE_WORLD_READABLE似乎Gmail有那么能够访问该文件,并正确地发送附件。虽然我在你的代码片断看到你正在使用MODE_WORLD_READABLE ...怪异的。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top