2013-06-13 1 views
0

У меня есть этот код, чтобы получить все фотографии, сохраненные на телефоне.Android: код не работает при получении списка всех изображений

String[] projection = {MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA}; 
final Cursor cursor =  context.getContentResolver().query(MediaStore.Images.Media.INTERNAL_CONTENT_URI, 
      projection, 
      null, 
      null, 
      null); 

return cursor.getCount(); 

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

Я действительно не знаю, как проверить это на эмуляторе.

У меня есть следующие разрешения

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Благодарности

+1

Посмотрите на этом уроке: http://mobile.dzone.com/news/displaying-images-sd-card Я пари вы добавили неправильный запрос 'MediaStore.Images.Media .INTERNAL_CONTENT_URI' - в учебнике он использует «MediaStore.Images.Media.EXTERNAL_CONTENT_URI'. Кроме того, это разрешение не делает ничего, кроме пугающих вас пользователей, если вы не собираетесь ничего сохранять на SD-карте. – Darwind

+0

Привет, Дарвин, спасибо за ваши комментарии. Просто случайно я изменил INTERNAL_CONTENT_URI на EXTERNAL_CONTENT_URI, и это сработало! Я удивлен, потому что у меня нет SD-карты на моем телефоне (Nexus 4). Я думаю, хотя андроид предполагает, что это внутренняя SD-карта. Теперь я получаю количество фотографий на мой взгляд. Еще раз спасибо. –

+0

Нет проблем. ;-) Да, внутреннее хранилище на Nexus следует указывать как внешнее хранилище. Я считаю, что это по дизайну. – Darwind

ответ

3

Вот код, который работал.

public ArrayList<String> getCameraImages(Context context) { 

    // Set up an array of the Thumbnail Image ID column we want 
    String[] projection = {MediaStore.Images.Media.DATA}; 


    final Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      projection, 
      null, 
      null, 
      null); 

    ArrayList<String> result = new ArrayList<String>(cursor.getCount()); 

    Log.i("cursor.getCount()) :", cursor.getCount() + ""); 

    if (cursor.moveToFirst()) { 
     final int dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     do { 
      final String data = cursor.getString(dataColumn); 
      Log.i ("data :",data); 
      result.add(data); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 

    return result; 

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