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

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

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

intent.setType (изображение / *);

intent.setAction (Intent.ACTION_GET_CONTENT);

startActivityForResult (Intent.createChooser (намерение, Выбрать изображение), SELECT_IMAGE);

но когда я получаю Uri в методе onActivityResult, используя этот

Uri images_uri = data.getData ();

данные пусты (этого не происходит, когда изображение загружается с SD-карты)

Как я мог это решить?

Более того, как второстепенная проблема, как я могу получить более одного изображения? Я читал об использовании 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
ммм .. вряд ли так ... Я прошел через это дважды, но безрезультатно ... Я не знаю, может ли что-то в манифесте мешает мне сделать это ... но все равно спасибо - 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