2014-06-30 14 views
6

Sto lavorando a una galleria di immagini personalizzata per la mia applicazione, ma ho riscontrato un problema serio con Samsung Galaxy S4 e S5. Il seguente codice funziona perfettamente su dispositivi HTC e Xperia ma non su quelli Samsung.Android - Scarica immagini galleria Samsung S4/S5

Fondamentalmente, i percorsi sono sempre null su questi dispositivi. Ecco il codice che ho creato. In linee grandi, restituisce un elenco di categorie contenenti un nome e un elenco di immagini. L'obiettivo è fornire una galleria basata su cartelle come quella nativa.

Se hai qualche idea del perché non funziona su Samsung Galaxy?

Grazie per il vostro aiuto.

public List<Category> getCategories() 
{ 
    Map<String, Category> map = new HashMap<String, Category>(); 

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

    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media.DATE_TAKEN + " DESC"); 
    if (cursor == null) return; 

    if (cur.moveToFirst()) 
    { 
     Category category = null; 
     long id = 0L; 
     String bucket = null;; 
     int idColumn = cur.getColumnIndex(MediaStore.Images.Media._ID); 
     int bucketColumn = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 

     do 
     { 
      id = cur.getLong(idColumn); 
      bucket = cur.getString(bucketColumn); 

      if (map.get(bucket) == null) 
      { 
       category = new Category(bucket); 
       map.put(bucket, category); 
      } 
      category = map.get(bucket); 

      category.addImage(idToImage(id)); 
     } 
     while (cur.moveToNext()); 
    } 

    return map.values().toArray(); 
} 

private Image idToImage(long id) 
{ 
    Image image = new Image(); 

    image.setThumbnail(getThumbnail(id)); 
    image.setImage(getImage(id)); 

    return image; 
} 

private String getThumbnail(long id) 
{ 
    String path = null; 
    Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(getContentResolver(), id, MediaStore.Images.Thumbnails.MINI_KIND, null); 
    if(cursor != null && cursor.getCount() > 0) 
    { 
     cursor.moveToFirst(); 
     path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 
     cursor.close(); 
    } 

    return path; 
} 

private String getImage(long id) 
{ 
    String path = null; 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    String where = MediaStore.Images.Media._ID + " = " + id; 
    Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, where, null, null); 
    int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
    if(cursor != null && cursor.getCount() > 0) 
    { 
     cursor.moveToFirst(); 
     path = cursor.getString(dataColumn); 
    } 
    return path; 
} 

risposta

0

Funzionerà

/** 
* Get actual file path from gallery 
*/ 
public String getPath(Uri uri, Context ctx) { 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    String result; 
    Cursor cursor = ctx.getContentResolver().query(uri, projection, null, null, null); 
    if (cursor == null) { 
     return null; 
    } 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    result = cursor.getString(column_index); 
    cursor.close(); 
    return result; 
} 
+0

Sulla S7 non opere – djdance

Problemi correlati