2013-08-14 7 views
7

Hallo ich einen Android-Galerie-App entwickle, wo ich in der Galerie Bilder von gebaut bin Abrufen und Anzeigen it.I wie untenBilder aus der Galerie auf Android-Handys mit internem Speicher holt

 String[] projection = {MediaStore.Images.Thumbnails._ID}; 


    Cursor cursor = getContentResolver().query(MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI, 
       projection, // Which columns to return 
       null,  // Return all rows 
       null,  
       null); 


     int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID); 
     int size = cursor.getCount(); 
     // If size is 0, there are no images on the SD Card. 
     if (size == 0) 
     { 
      Log.e("size 0","0"); 
     } 

Das Problem des Code verwenden Wenn ich diesen Code auf Handys mit nur internem Speicher (Galaxy Nexus) laufen lasse, bekomme ich Log, der Größe wie Zero sagt, obwohl es Bilder in der Galerie gibt. Wie kann ich das beheben? Bitte Hilfe. Danke!

+0

Versuchen Sie, 'MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI' in' MediaStore.Images.Media.EXTERNAL_CONTENT_URI' zu ändern – Tarun

+0

Auf Benutzermedien wird von EXTERNAL_CONTENT_URI zugegriffen. INTERNAL_CONTENT_URI wird nur von System-Apps verwendet. – Tarun

+0

Ich habe versucht, EXTERNAL_CONTENT_URI und auch INTERNAL_CONTENT_URI, die EXTERNAL funktioniert gut auf Handys, die SD-Karte haben, aber funktioniert nicht auf Handys wie Galaxy Nexus (kein externer Speicher) – sanjana

Antwort

2

Zur Liste der Galerie Bilder erhalten Sie diese wie

String[] projection = new String[]{ 
     MediaStore.Images.Media._ID, 
     MediaStore.Images.Media.BUCKET_DISPLAY_NAME, 
     MediaStore.Images.Media.DATE_TAKEN 
}; 


Uri imageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 


Cursor cur = getContentResolver().query(imageUri, 
     projection, // Which columns to return 
     null,  // Which rows to return (all rows) 
     null,  // Selection arguments (none) 
     null  // Ordering 
     ); 

Log.i("Images Count"," count="+cur.getCount()); 
+0

managedQuery ist veraltet. Sie sollten stattdessen getContentResolver(). query (...) verwenden. –

2

Versuchen Sie diese auf Ihrem Knopf versuchen können

browse.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

     Intent i = new Intent(
       Intent.ACTION_PICK, 
       android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

       startActivityForResult(i, RESULT_LOAD_IMAGE); 

    } 
}); 

„Durchsuchen“ und Sie cal auch ausgewählte Bild in Ihre Image als

gesetzt

Im ersten Codeblock verwende ich startActivityForResult(i, RESULT_LOAD_IMAGE); dieses Ergebnis als Aktivität an d können wir dieses Ergebnis durch den zweiten Block des Codes erhalten und stellen ausgewählte Bild in Ihrem Image

2
String[] projection = {MediaStore.Images.Media._ID}; 

ersetzen MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI mit MediaStore.Images.MEDIA.EXTERNAL_CONTENT_URI

Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       projection, // Which columns to return 
       null,  // Return all rows 
       null,  
       null); 


    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID); 
    int size = cursor.getCount(); 
    // If size is 0, there are no images on the SD Card. 
    if (size == 0) 
    { 
     Log.e("size 0","0"); 
    } 

EDIT: Erhalten Sie die Liste von Thumbnails und erhalten das Bild URI vom Cursor


Uri uri=MediaStore.Images.Thumbnails.getContentUri("external"); 

Cursor cursor=MediaStore.Images.Thumbnails.queryMiniThumbnails 
     (getContentResolver(), uri, MediaStore.Images.Thumbnails.MINI_KIND,null); 

if(cursor != null && cursor.getCount() > 0) { 
    String uri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
}