2016-04-08 100 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内容提供者充当应用程序和存储之间的中间层,提供易用性。

因此,假设你想加载所有图像,然后只是查询内容提供商媒体/外部/图像数据库,你将能够快速加载数据。音乐库同样如此。