2010-04-13 67 views
8

我试图通过ACTION_SEND意图从Android图库接收图像。我已经设置了适当的意图过滤器,画廊打开我的应用程序。现在我想知道如何获取图像数据。我无法在互联网上找到任何这样做的例子。我认为路径在intent.getData()中的某处,但是我怎样才能从画廊中拉出该图像?从图库中接收ACTION_SEND意图

回答

15

在Picasa源代码中找到它。它给出了图像的正确路径。

Intent intent = getIntent(); 
    if (Intent.ACTION_SEND.equals(intent.getAction())) { 
     Bundle extras = intent.getExtras(); 
     if (extras.containsKey(Intent.EXTRA_STREAM)) { 
      Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM); 
      String scheme = uri.getScheme(); 
      if (scheme.equals("content")) { 
       String mimeType = intent.getType(); 
       ContentResolver contentResolver = getContentResolver(); 
       Cursor cursor = contentResolver.query(uri, null, null, null, null); 
       cursor.moveToFirst(); 
       String filePath = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.DATA)); 
+0

在哪个文件中以及该文件的位置是要放置的。 – 2015-04-08 10:17:43

0

不能确定SEND意图,但处理来自PICK意图的MediaStore相片返回时,它会是这样的:

Uri selectedImage = intent.getData(); 
    AssetFileDescriptor fd = getContentResolver() 
      .openAssetFileDescriptor(selectedImage, "r"); 
    FileInputStream s = fd.createInputStream(); 
    // your image data processing code here 

不过要小心 - 你可以用5+万像素的文件中工作,它可能相当大(特别是如果你将它们解压缩为位图来处理),并且你的内存非常有限。