2016-04-08 99 views
0

當我看到使用視頻,照片,歌曲等文件的Android應用時,這些內容在打開時已經顯示出來。我試圖在我的應用程序中查詢所有這些,即使只有100首歌曲,我也必須等待幾百毫秒。當我想要獲取圖片或視頻時,大概需要同一時間。 Google Play上看到的應用程序如何實現這種加載速度?他們還能夠(例如)在加載應用程序和查找文件之前使用此信息(音樂播放器小部件)創建小部件。如何立即獲取文件資源?

我如何加載歌曲的一個例子:

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

當你「......在我的應用程序中查詢所有這些...」時,你可以發佈代碼的示例代碼片段嗎? –

回答

0

使用機器人內容提供商類的媒體文件快速加載到你的應用程序。

Android內容提供者充當應用程序和存儲之間的中間層,提供易用性。

因此,假設你想加載所有圖像,然後只是查詢內容提供商媒體/外部/圖像數據庫,你將能夠快速加載數據。音樂庫同樣如此。