2016-04-08 8 views
0

Wenn ich eine Android-App mit Dateien wie Videos, Fotos, Songs sehe, werden diese Dinge bereits beim Öffnen angezeigt. Ich habe versucht, alle diese in meiner App abzufragen, und ich muss einige hundert Millisekunden warten, selbst wenn ich nur 100 Lieder habe. Wenn ich Bilder oder Videos bekommen möchte, dauert es ungefähr gleichzeitig. Wie können Apps bei Google Play diese Ladegeschwindigkeit erreichen? Sie können beispielsweise auch Widgets mithilfe dieser Informationen (Musik-Player-Widget) erstellen, bevor sie die App laden und die Dateien finden.Wie erhalten Sie Dateiressourcen sofort?

Ein Beispiel, wie ich Songs laden:

final String[] mediaProjection = { 
      MediaStore.Audio.Media._ID, 
      MediaStore.Audio.Media.ALBUM_ID, 
      MediaStore.Audio.Media.ARTIST_ID, 
      MediaStore.Audio.Media.TITLE, 
      MediaStore.Audio.Media.ALBUM, 
      MediaStore.Audio.Media.ARTIST, 
      MediaStore.Audio.Media.DURATION, 
      MediaStore.Audio.Media.YEAR, 
      MediaStore.Audio.Media.DATE_ADDED, 
      MediaStore.Audio.Media.DATE_MODIFIED, 
      MediaStore.Audio.Media.DATA,}; 

    ContentResolver songResolver = getContentResolver(); 
    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = songResolver.query(musicUri, mediaProjection, null, null, null); 

    if (musicCursor != null && musicCursor.moveToFirst()) { 
     int idColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID); 
     int albumIdColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); 
     int artistIdColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID); 
     int titleColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE); 
     int albumColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
     int artistColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
     int durationColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION); 
     int yearColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.YEAR); 
     int dateAddedColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED); 
     int dateModifiedColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATE_MODIFIED); 
     int pathColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA); 

     do { 
      long songId = musicCursor.getLong(idColumn); 
      long songAlbumId = musicCursor.getLong(albumIdColumn); 
      long songArtistId = musicCursor.getLong(artistIdColumn); 
      String songTitle = musicCursor.getString(titleColumn); 
      String songAlbum = musicCursor.getString(albumColumn); 
      String songArtist = musicCursor.getString(artistColumn); 
      long songDuration = musicCursor.getLong(durationColumn); 
      int songYear = musicCursor.getInt(yearColumn); 
      int songDateAdded = musicCursor.getInt(dateAddedColumn); 
      int songDateModified = musicCursor.getInt(dateModifiedColumn); 
      String songPath = musicCursor.getString(pathColumn); 


       // Add these things into a list 
       // ... 
      } 
     } while (musicCursor.moveToNext()); 
    } 
    if (musicCursor != null) { 
     musicCursor.close(); 
    } 

    return true; 
+0

Können Sie ein Beispiel-Snippet Ihres Codes posten, wenn Sie "... alle in meiner App abfragen ..."? –

Antwort

0

Verwendung Androiden Content-Provider-Klasse schnell Mediendateien für Ihre Anwendung zu laden.

Der Android-Inhaltsanbieter fungiert als Mittelschicht zwischen Anwendung und Speicher und bietet Benutzerfreundlichkeit.

Angenommen, Sie möchten alle Bilder laden, dann nur Content Provider Media/Externe/Image-Datenbank abfragen, und Sie können Daten schnell laden. Gleicher Weg für die Musikbibliothek.