android:在库中选择多个图像并启动隐式意图

时间:2012-11-14 11:38:45

标签: android android-intent android-gallery intentfilter

如何获取所有选定图像的图像路径或仅在我的应用中显示它们? 当用户在图库中选择图像并按下共享按钮时,我可以启动我的隐含意图并在我的imageView中显示它,如下所示

ImageView iv=(ImageView)findViewById(R.id.im);
iv.setImageUri((Uri)getIntent().getExtras().get(Intent.EXTRA_STREAM));

在我的活动的清单文件中

<intent-filter >
            <action android:name="android.intent.action.SEND"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="image/*" />
</intent-filter>

但我想在内置图库中选择多个图像,当我按下分享按钮时,我应该可以在我的应用中显示它们,那么我该怎么做?

或从sdcard获取所有选定图像的图像路径对我来说已经绰绰有余了

1 个答案:

答案 0 :(得分:10)

我自己得到了它:发布它,因为它可能会帮助其他人,如果需要的话

我们应该告诉android当我们打开图库并选择分享按钮时,我的应用程序必须是共享的选项之一,如:

manifest资源配置文件:

<activity android:name=".selectedimages">
        <intent-filter >
            <action android:name="android.intent.action.SEND_MULTIPLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>

在选择我们的应用程序后,它将打开图库,每个图像上都有复选框以选择图像, 在应用程序中处理选定的图像:

selectedimages.java文件:

if (Intent.ACTION_SEND_MULTIPLE.equals(getIntent().getAction())
    && getIntent().hasExtra(Intent.EXTRA_STREAM)) {
    ArrayList<Parcelable> list =
            getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);
                for (Parcelable parcel : list) {
                   Uri uri = (Uri) parcel;
                   String sourcepath=getPath(uri);

                   /// do things here with each image source path.
               }
                finish();
}
}

public  String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
startManagingCursor(cursor);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}