2016-04-08 10 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コンテンツプロバイダは、使いやすさを提供するアプリケーションとストレージの中間層として機能します。

すべての画像を読み込み、コンテンツプロバイダのメディア/外部/画像データベースを照会して、すぐにデータを読み込むことができるとします。音楽ライブラリの場合と同じです。

関連する問題