如何使用setResult()方法从可调活动向调用活动发送可绘制图像资源

时间:2013-01-18 16:48:02

标签: android android-intent android-activity

大家好我是一个为Android开发应用程序的新手我有一个应用程序说whatsapp使用它我们可以从库中选择图片并将其发送给我们的朋友。同样我正在创建一个响应ACTION_PICK意图的类似应用程序的活动..

假设我已经使用getIntent()从whatsapp接收到我的活动的意图,并且我将使用setResult()发送结果...之间我想知道如何从我的应用程序插入可绘制的图像资源通过setResult获取应用程序,以便whatsapp可以接受我在我的应用程序中点击的图像并将其发送给我的朋友。

以下代码是developer.android.com的参考资料

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    // Get the intent that started this activity
    Intent intent = getIntent();
    Uri data = intent.getData();

    // Figure out what to do based on the intent type
    if (intent.getType().indexOf("image/") != -1) {
        // Handle intents with image data ...

       **// wanted to know what code must be entered here.** 


    } else if (intent.getType().equals("text/plain")) {
        // Handle intents with text ...
    }
}


// Create intent to deliver some kind of result data
Intent result = new Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri");
setResult(Activity.RESULT_OK, result);
finish();

2 个答案:

答案 0 :(得分:1)

传递图像可能很慢,因为有时图像可能非常大。您可以将其保存到硬盘并将文件路径传递回您的活动,并让您的活动打开它。

答案 1 :(得分:1)

最简单的方法是@ wtsang02建议的。如果您不想触摸文件系统,还有其他几种方法。

  1. 使用MemoryFile。然后,您可以获得易于在Intent中传递的文件描述符(选中thisthis)。

  2. 我认为这是一种更清洁的方法,但您需要对其进行基准测试以确定它是否适合您。您可以获取byte array from your Drawable,将其作为Parcelable发送,然后从byte []重新构建Drawable:

    byte[] drawableBytes = [your byte array];
    ByteArrayInputStream is = new ByteArrayInputStream(drawableBytes);
    Drawable drw = Drawable.createFromStream(is, "drawable");