I am making a project in which i want to select multiple photos from gallery and want to save that in imageview array. I am able to import single image and save at imageview
Here is the code for Select Multiple Image and video from Default Gallery.
Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture);
buttonLoadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent();
i.setType("image/*");
//i.setType("video/*");
i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(i, "android.intent.action.SEND_MULTIPLE"), 1);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("++data" + data.getClipData().getItemCount());// Get count of image here.
System.out.println("++count" + data.getClipData().getItemCount());
Uri selectedImage = data.getClipData().getItemAt(0).getUri();//As of now use static position 0 use as per itemcount.
Bitmap bitmap = null;
// Uri selectedImage1 = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("+++ clipdate" + selectedImage);
ImageView imageView = (ImageView) findViewById(R.id.imgView);
imageView.setImageBitmap(bitmap);
// }
}
There is EXTRA_ALLOW_MULTIPLE
option is set on the intent through the Intent.putExtra()
method:
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
In your code write as below:
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), RESULT_LOAD_IMAGE1);
Note: the EXTRA_ALLOW_MULTIPLE
option is only available in Android API 18 and higher.
If you want to develop your own gallery then check out the Select Multiple Images from Gallery
I think android does not support selecting multiple images. For that need to use some library. i was also stuck in the same
https://github.com/luminousman/MultipleImagePick
this one helped me.
Complete Working Answer
Intent
Intent intent = new Intent();
intent.setType("image/*");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_MULTIPLE);
Activity Result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
// When an Image is picked
if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK
&& null != data && null != data.getClipData()) {
ClipData mClipData = data.getClipData();
Toast.makeText(getActivity(), "You picked " +
(mClipData.getItemCount() > 1 ? mClipData.getItemCount() + "Images" :
mClipData.getItemCount() + "Image"),
Toast.LENGTH_LONG).show();
pickedImageContainer.removeAllViews();
int pickedImageCount;
for (pickedImageCount = 0; pickedImageCount < mClipData.getItemCount();
pickedImageCount++) {
ImageView productImageView =
new ImageView(getActivity());
productImageView.setAdjustViewBounds(true);
productImageView.setScaleType(ImageView.ScaleType.FIT_XY);
productImageView.setLayoutParams(new LinearLayout
.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
pickedImageContainer.addView(productImageView);
Glide.with(getActivity())
.load(mClipData.getItemAt(pickedImageCount).getUri())
.fitCenter().placeholder(R.drawable.map_default)
.error(R.drawable.map_default)
.into(productImageView);
}
} else {
Toast.makeText(getActivity(), "You haven't picked any Image",
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getActivity(), "Error: Something went wrong " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
super.onActivityResult(requestCode, resultCode, data);
}
This is manifest file code for app to get consider you are sending images to your app
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.appshare"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action
android:name="android.intent.action.SEND_MULTIPLE" />
<action
android:name="android.intent.action.SEND" />
<category
android:name="android.intent.category.DEFAULT" />
<data
android:mimeType="image/*" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Program code...
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity", "on Create ");
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 uri1 = (Uri) parcel;
Log.d("MainActivity", "on Create uri1 " + uri1);
String sourcepath=getPath(uri1);
Log.d("MainActivity", "on Create sourcepath " + sourcepath);
/// do things here with each image source path.
}
//Commented by Aishwary coz I want to open the app after selecting images otherwise uncomment to just select
//finish();
}else{
// This part is of single image by Aishwary
Uri imageUri =(Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM);
Log.d("MainActivity", "on Create ImageUri " + imageUri);
}
}
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);
}
}
This will allow you to get source path and images url . Now you can make array for url and use this url as you want...
int SELECT_PICTURE=1;
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_PICTURE);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
switch (requestCode) {
case SELECT_PICTURE:
Uri selectedImageUri = data.getData();
imgPerview.setBackgroundColor(Color.TRANSPARENT);
LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
imgPerview.setLayoutParams(vp);
imgPerview.setScaleType(ImageView.ScaleType.FIT_XY);
imgPerview.setImageURI(selectedImageUri);
uri = selectedImageUri;
}
}
catch (Exception ex)
{}
}