如何使用位图发送到另一个应用

时间:2015-07-07 01:42:22

标签: android bitmap

有人可以帮助我如何将图像发送到android中的另一个应用程序吗?

我想发送一张用作壁纸的图像,BBM显示图片以及其他可以使用它的应用程序(如WhatsApp,联系人等)

我使用此代码,但它只能用于发送文本而不是我想要的图像

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);

然后我尝试使用此代码设置壁纸

public void setAsWallpaper(Bitmap bitmap) {
        try {           
            WallpaperManager wm = WallpaperManager.getInstance(_context);
            wm.setBitmap(bitmap);

            //disinimas
            Toast.makeText(_context,
                    _context.getString(R.string.toast_wallpaper_set),
                    Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(_context,
                    _context.getString(R.string.toast_wallpaper_set_failed),
                    Toast.LENGTH_SHORT).show();
        }
    }

代码问题,位图图像直接应用为壁纸。我想在上面发送文本,用户可以选择使用其他应用程序。所以我想要一个稍后可以用于壁纸,BBM显示图片或其他支持它的应用程序的位图图像

位图变量已包含我想要的图像,使用此代码从互联网获取的图像:

Bitmap bitmap = ((BitmapDrawable) fullImageView.getDrawable())
                .getBitmap();

我使用此代码及其工作,但给我一条消息BBM:找不到文件,WhatsApp:文件不是图像:

Bitmap icon = bitmap;
    Intent share = new Intent(Intent.ACTION_ATTACH_DATA);
    share.setType("image/jpeg");

    ContentValues values = new ContentValues();
    values.put(Images.Media.TITLE, "title");
    values.put(Images.Media.MIME_TYPE, "image/jpeg");
    Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,
            values);


    OutputStream outstream;
    try {
        outstream = getContentResolver().openOutputStream(uri);
        icon.compress(Bitmap.CompressFormat.JPEG, 100, outstream);
        outstream.close();
    } catch (Exception e) {
        System.err.println(e.toString());
    }

    share.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(share, "Share Image"));

2 个答案:

答案 0 :(得分:1)

感谢您对Antrromet的帮助,最后我用以下代码解决了我的问题:

Bitmap icon = bitmap;
        //  Intent share = new Intent(Intent.ACTION_SEND);
        //  share.setType("image/*");

            ContentValues values = new ContentValues();
            values.put(Images.Media.TITLE, "title");
            values.put(Images.Media.MIME_TYPE, "image/*");
            Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,
                    values);


            OutputStream outstream;
            try {
                outstream = getContentResolver().openOutputStream(uri);
                icon.compress(Bitmap.CompressFormat.JPEG, 100, outstream);
                outstream.close();
            } catch (Exception e) {
                System.err.println(e.toString());
            }

            Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setDataAndType(uri, "image/*");
            intent.putExtra("mimeType", "image/*");
            this.startActivity(Intent.createChooser(intent, "Set as:"));

现在图像可以用作壁纸,BBM个人资料图片,WA显示图片,Coontact显示图片等。谢谢

答案 1 :(得分:0)

您是否尝试使用以下代码?它用于send binary data其他应用。

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));

或者,如果您没有包含URI,但却使用了Bitmap,那么请尝试使用给定here的代码。

<强>更新

为BBM设置壁纸和个人资料图片是完全不同的事情,他们没有共同的意图。要设置壁纸,您可以按照here给出以下内容。

Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.setDataAndType(uri, "image/jpeg");
    intent.putExtra("mimeType", "image/jpeg");
    this.startActivity(Intent.createChooser(intent, "Set as:"));

对于BBM,API未打开以更改用户图像。所以你不能通过你的应用程序做到这一点。