【问题标题】:Android | give image with intent安卓 |有意图地给出图像
【发布时间】:2016-07-24 11:18:07
【问题描述】:

我想将我的图像从一个活动传递到另一个活动。起初我试图用我的图像的 base64 字符串来做到这一点。但这仅适用于小图片。它适用于 400 kb,但不适用于 600 kb。有一个更好的方法吗?顺便说一句,我没有在本地保存图像,我从服务器获取图像,所以我没有真正的 Drawable。

【问题讨论】:

    标签: android android-intent android-activity drawable


    【解决方案1】:

    如果你只有远程 URL,那么你可以直接分享,否则你可以将图片保存在本地媒体存储中,然后分享其本地 URL。比如:

    Bitmap bitmap = ...
    String path = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Image Description", null);
    Uri uri = Uri.parse(path);
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/jpeg");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(intent, "Share Image"));
    

    【讨论】:

    • 谢谢,它工作!但是画质不如原图。你有解决这个问题的方法吗? @manfcas
    【解决方案2】:

    尽管在 android 中通过 Intent 传递大“块”数据有点不鼓励(使用单例或将图像存储在内部存储器中等),但您可以通过以下方式实现:

    1 - 在您的发件人活动中

    Intent yourIntent = new Intent(YourActivity.this, DestinationActivity.class);
    Bitmap bmp; // store the image in your bitmap 
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 50, baos);
    yourIntent.putExtra("yourImage", baos.toByteArray());
    startActivity(yourIntent);
    

    2 - 关于您的接收器活动

    // parse the intent onCreate()
    if(getIntent().hasExtra("yourImage")) {
        ImageView iv = new ImageView(this);
        Bitmap bmp = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("yourImage"), 0, getIntent().getByteArrayExtra("yourImage").length);        
        iv.setImageBitmap(bmp);
    }
    

    强烈建议您这样做,因为:

    1 - 通过意图传递数据存在内存限制。 您可以使用 Intent 传输的最大数据量为 500KB(在 API 10、16、19 和 23 上测试)。 check this external reference

    有时,位图可能太大而无法处理,从而导致OOM(我过去曾遇到过这种情况)或导致糟糕的UI体验。

    2 - 如果您的活动因任何原因崩溃,从而导致应用程序崩溃,您将丢失图像,因为它存储在临时内存中。如果您将其保存在内部,您可以即使应用程序崩溃,也要保留图像。

    一般来说,最佳做法是在需要时处理图像,将其存储在设备文件夹(可以是内部或外部存储器)中,然后在需要时再次检索它以进行更多处理。这样可以避免在整个应用程序中分配不必要的内存。

    【讨论】:

      【解决方案3】:

      此外,您还可以使用第三方库,例如 Picasso 或 Glide。我个人喜欢 Glide,因为它的性能比其他任何产品都好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多