Четене на изображения от паметта на телефона (без SD)

В момента се боря с проблем, който бих искал да ми помогнете да разреша... всъщност се опитвам да получа някои изображения от вътрешната галерия на телефона по този начин

Intent намерение = ново намерение();

intent.setType(image/*);

intent.setAction(Intent.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, Select Picture),SELECT_IMAGE);

но когато получа Uri в метода onActivityResult, използвайки това

Uri images_uri = data.getData();

данните са празни (това нещо не се случва, когато изображението се извлича от SD картата)

Как мога да го реша?

Освен това, като вторичен проблем, как мога да получа повече от 1 изображение? Четох за използването на ACTION_SEND_MULTIPLE, но това отваря избор за методи за изпращане вместо места, откъдето да се извличат изображения...

Благодаря ви предварително


person kioli    schedule 26.04.2012    source източник


Отговори (2)


Опитайте тази

    public static final int GALLERY_CODE = 322;
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),
            GALLERY_CODE);


         @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Assinging on corresponding import
    super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == GALLERY_CODE && resultCode == RESULT_OK) {
        Uri selectedImageUri = data.getData();
        selectedImagePath = getPath(selectedImageUri);
        try {
            //add logic for coping file
        } catch (Exception e) {
            e.printStackTrace();
        }
       }

    }

    public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
person Jackson Chengalai    schedule 26.04.2012
comment
Не, вече успях да се изправя пред проблема по този начин... факт е, че след като стигнете до реда Uri selectedImageUri = data.getData(); URI, който получавате, е празен, защото данните, които получавате, са празни... - person kioli; 26.04.2012
comment
ако получите изгледа на галерията по подразбиране, за да изберете снимката?\ - person Jackson Chengalai; 26.04.2012
comment
да, получавам галерията по подразбиране, откъдето да избирам снимките, но когато SD картата не е на мястото си, въпреки че галерията се показва (очевидно много по-малко снимки, но все пак някои) и аз избирам снимката, тя не ми връща нищо - person kioli; 26.04.2012
comment
мисля, че това ще ви помогне..stackoverflow.com/questions/550905/ stackoverflow.com/questions/4843764/ - person Jackson Chengalai; 26.04.2012
comment
mmhh.. едва ли го мисля... минах през това два пъти, но без резултат... не знам дали може нещо в манифеста да ми попречи да го направя... но все пак благодаря - person kioli; 26.04.2012

Е, в моя случай това всъщност беше дефектен списък с кеша (галерията показваше снимки, които всъщност не бяха там, така че ако ги избрах, действителният URI се оказа нулев).

Преди да извикате намерението ACTION_GET_CONTENT, предлагам да добавите тази команда:

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

което ще каже на галерията, че трябва да опресни данните си. Ако направите това, внимавайте да заспите за кратко нишката си (например:

  Thread.sleep(1000);

). Това трябва да позволи на действието за опресняване да завърши, преди действително да бъде отворено. Поне на моя телефон това предотврати кратко мигане на приложението Галерия.

person DigCamara    schedule 09.09.2012