从 Drawable Returns 获取 PNG 的 URI 没有任何文件扩展名的空白文件

Getting URI of PNG from Drawable Returns Blank file without any File extension

我有一个分享按钮,可以分享带有文本的可绘制图像。

public boolean shareGame(String msg) {
    if (Configuration.Share_WITH_IMAGE) {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("image/png");
        Uri uri = Uri
                .parse("android.resource://" + getPackageName() + "/" + R.drawable.share_image);

        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        shareIntent.putExtra(Intent.EXTRA_TEXT, msg + " " + GOOGLE_PLAY_URL);
        startActivity(Intent.createChooser(shareIntent, "Share: " + msg));
    } else {
        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, msg + GOOGLE_PLAY_URL);
        sendIntent.setType("text/plain");
        startActivity(Intent.createChooser(sendIntent, msg));
    }

    return true;

}

目前,当我尝试通过电子邮件共享它时,它 returns 是一个没有任何扩展名的空文件。 WhatsApp 共享给出文件类型不受支持的错误。

我需要将其转换为位图吗?如果是这样,最好的方法是什么。

谢谢。

Uri imageUri = Uri.parse("android.resource://" + getPackageName()
    + "/drawable/" + "ic_launcher");
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, "Hello");
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/jpeg");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "send"));

来自

此代码有效..我已经针对 gmail 和 whatsapp 对其进行了测试

Bitmap icon = BitmapFactory.decodeResource(getResources(),
            R.drawable.ic_launcher);
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/jpeg");
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    File f = new File(Environment.getExternalStorageDirectory()
            + File.separator + "share_image.jpg");

    try {
        f.createNewFile();
        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());

    } catch (IOException e) {
        e.printStackTrace();
    }
    share.putExtra(Intent.EXTRA_TEXT, "send text");

    share.putExtra(Intent.EXTRA_STREAM,
            Uri.parse("file:///sdcard/share_image.jpg"));
    startActivity(Intent.createChooser(share, "Share Image"));

编辑:我不知道你为什么会收到这个错误希望你已经添加了权限如果没有添加以下权限

 <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>