Reputation: 668
I'm using andengine in my Android application and would like to display images from device's gallery. How I can get images path? Please note, I do not want to use something like this:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),1);
What I need, is just the path of images. Would you please help me?
Upvotes: 1
Views: 639
Reputation: 2527
maybe I've misunderstood the question here, but it sounds to me like you want to know how to find where photos are stored by default.
From the Dev Guide
In API Level 8 or greater, use getExternalStoragePublicDirectory(), passing it the type of public directory you want, such as DIRECTORY_MUSIC, DIRECTORY_PICTURES, DIRECTORY_RINGTONES, or others. This method will create the appropriate directory if necessary.
If you're using API Level 7 or lower, use getExternalStorageDirectory() to open a File that represents the root of the external storage, then save your shared files in one of the following directories:
Music/ - Media scanner classifies all media found here as user music.
Podcasts/ - Media scanner classifies all media found here as a podcast.
Ringtones/ - Media scanner classifies all media found here as a ringtone.
Alarms/ - Media scanner classifies all media found here as an alarm sound.
Notifications/ - Media scanner classifies all media found here as a notification sound.
Pictures/ - All photos (excluding those taken with the camera).
Movies/ - All movies (excluding those taken with the camcorder).
Download/ - Miscellaneous downloads.
Upvotes: 1
Reputation: 5241
Please look at the following code,
public class select_Gallery_image extends Activity{
private static final int SELECT_PICTURE = 1;
protected String _path;
protected boolean _taken;
protected static final String PHOTO_TAKEN = "photo_taken";
ProgressDialog PD1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
//intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, SELECT_PICTURE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
if (requestCode == SELECT_PICTURE)
{
settings.bitmap=null;
Uri selectedImageUri = data.getData();
settings.selectedImagePath = getPath(selectedImageUri);
File filenew = new File(settings.selectedImagePath);
int file_size = Integer.parseInt(String.valueOf(filenew.length()/1024));
if(file_size<= 10000){
PD1 = ProgressDialog.show(select_Gallery_image.this,"","Loading");
new Thread(new Runnable() {
public void run() {
Looper.prepare();
settings.bitmap = decodeFile(settings.selectedImagePath);
imagehandler.sendEmptyMessage(0);
}
}).start();
}
else{
AlertDialog.Builder alertbox = new AlertDialog.Builder(select_Gallery_image.this);
alertbox.setMessage("Take Image Size Less than 10 MB");
alertbox.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
finish();
}
});
alertbox.show();
}
}
}
}
private Handler imagehandler = new Handler(){
public void handleMessage(Message msg){
PD1.dismiss();
settings.img_logo.setImageBitmap(settings.bitmap);
settings.img_logo.setBackgroundColor(Color.DKGRAY);
finish();
}
};
public String getPath(Uri uri)
{
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
static Bitmap decodeFile(String str){
try {
//decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(str),null,o);
//Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE=70;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale++;
}
//decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(str), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
finish();
}
return super.onKeyDown(keyCode, event);
}
}
Upvotes: 7
Reputation: 109237
Try this code without using intent,
private void FillPhotoList()
{
// initialize the list!
ArrayList<String> GalleryList = new ArrayList<String>();
String[] projection = {MediaStore.Images.ImageColumns.DATA};
// intialize the Uri and the Cursor, and the current expected size.
Cursor c = null;
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
//
// Query the Uri to get the data path. Only if the Uri is valid.
if (u != null)
{
c = managedQuery(u, projection, null, null, null);
}
// If we found the cursor and found a record in it (we also have the id).
if ((c != null) && (c.moveToFirst()))
{
do
{
// Loop each and add to the list.
GalleryList.add(c.getString(0));
}
while (c.moveToNext());
}
}
Upvotes: 2