2013-03-08 3 views
2

Я использую намерение так:Невозможно выбрать конкретные изображения, используя ACTION_PICK намерения

Intent intent = new Intent(Intent.ACTION_PICK, 
     android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 

И onActivityResult() я это:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode != Activity.RESULT_OK) { 
     return; // user cancelled 
    } 

    Uri imageUri = data.getData(); 
    if (imageUri == null) { 
     // (code to show error message goes here) 
    return; 
    } 

    // Get image path from media store 
    String[] filePathColumn = { android.provider.MediaStore.MediaColumns.DATA }; 
    Cursor cursor = this.getContentResolver().query(imageUri, filePathColumn, 
      null, null, null); 

    if (cursor == null || !cursor.moveToFirst()) { 
     // (code to show error message goes here) 
     return; 
    } 

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    String imagePath = cursor.getString(columnIndex); 
    cursor.close(); 

    if (imagePath == null) { 
     // error happens here 
    } 
} 

Когда я выбираю изображения из отдельных альбомов как «Сообщения», «Фотографии профиля» (см. Снимок экрана) Я не могу получить путь к изображению в onActivityResult(). Изображения из других альбомов могут быть выбраны без проблем.

Galley screenshot

Я попытался добавить intent.putExtra("return-data", true) но data.getExtras() возвращается null в onActivityResult().

Существует similar question here, но никто на это не ответил.

Пожалуйста, помогите!

ответ

6

хмель Это поможет вам ....

ACTIVITYRESULT_CHOOSEPICTURE это int, который вы используете при вызове startActivity (намерение, requestCode);

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == ACTIVITYRESULT_CHOOSEPICTURE) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    final InputStream ist = ontext.getContentResolver().openInputStream(intent.getData()); 
    final Bitmap bitmap = BitmapFactory.decodeStream(ist, null, options); 
    ist.close(); 
    } 
} 

если выше код не работает, чем просто сослаться на эту ссылку ... он угрюмый показывает путь

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

+0

Ваш код отлично работает. Благодаря! – Lev

+0

спасибо Лев ..... :) –

+1

Это также помогает мне. Отличная работа. Но один вопрос иногда занимает слишком много времени, чтобы вернуться в действие и отобразить выбранное изображение в поле зрения. Любая идея, почему требуется время для загрузки? –

1

попробовать это:

String selectedImagePath = imageUri.getEncodedPath(); 

это работает для меня, используя Picker галерею изображений

может быть, это:

bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()); 
+0

Это дает мне путь к файлу, похожее на это:/PICASA/пункт/5769844615871490082. Но когда я пытаюсь декодировать его с помощью BitmapFactory.decodeFile, я получаю Unable для декодирования потока: java.io.FileNotFoundException:/picasa/item/5769844615871490082: open failed: ENOENT (Нет такого файла или каталога). Нужно ли мне как-то обрабатывать этот путь? – Lev

+0

Я ставлю редактирование, возможно, это получит его через uri из data.getData() im не уверен, что эта проблема у меня никогда не было, возможно, изображения arent на файловой системе телефона, idk – JRowan

+0

, если вы выясните это, пожалуйста, позвольте мне знаю, я боюсь, что могу столкнуться с той же проблемой. – JRowan

Смежные вопросы