2019년 3월 14일 목요일

[Android] Audio query on MediaStore

Android MediaStore class supports all available media and meta data on internal/external storage devices.

Android Video information can be found in MediaStore.Audio.Media
Content Provier can be access MediaStore class with query method.
Refer ContentProvider

public Cursor query (Uri uri,
                String[] projection, 
                String selection, 
                String[] selectionArgs, 
                String sortOrder)

For example, if Audio query on external storage, then
==========================================
void queryAudio(Context context) {
        String[] audioColumns = {
                       MediaStore.Audio.Media._ID,
                       MediaStore.Audio.Media.DATA,
                       MediaStore.Audio.Media.DISPLAY_NAME, 
                       MediaStore.Audio.Media.TITLE,
                       MediaStore.Audio.Media.DURATION, 
                       MediaStore.Audio.Media.ARTIST,
                       MediaStore.Audio.Media.ALBUM_ID, 
                       MediaStore.Audio.Media.ALBUM,
                       MediaStore.Audio.Media.DATE_ADDED};
         Cursor audioCursor = context.getContentResolver().query(
                          MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                          audioColumns,null,null,null);
        if (audioCursor != null && audioCursor.moveToFirst()) {
            int audioId = 0; 
            String audioPath = null;
            String audioDisplayName = null;
            String audioTitle = null;
            int audioDuration = 0;
            String audioArtist = null;
            String audioAlbum = null;
            int dateAdded = 0;
            int audioIdColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media._ID);
            int audioPathColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.DATA);
            int audioDisplayNameColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME); 
            int audioTitleColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
            int audioDurationColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.DURATION); 
            int audioArtistColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
            int audioAlbumColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
            int dateAddedColumnIndex = audioCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED);
            do {
                audioId = audioCursor.getInt(audioIdColumnIndex);
                audioPath = audioCursor.getString(audioPathColumnIndex); 
                audioDisplayName = audioCursor.getString(audioDisplayNameColumnIndex); 
                audioTitle = audioCursor.getString(audioTitleColumnIndex);
                audioDuration = audioCursor.getInt(audioDurationColumnIndex); 
                audioArtist = audioCursor.getString(audioArtistColumnIndex); 
                audioAlbum = audioCursor.getString(audioAlbumColumnIndex); 
                dateAdded = audioCursor.getInt(dateAddedColumnIndex); 
 
                 // do action
 
            } while (audioCursor.moveToNext()); 
       }
    }

 ==========================================

After querying audio, audio columns index get from audio cursor column index.
Each audio information can get from current audio cursor by moving audio cursor index.

This example gets the audio id, path, display name, title, duration, artist, album, added date from MediaStore.
After received audio data, it can be used to load thumbnail, play audio etc.

Unity Audio Supported formats
  MPEG layer 3:  .mp3
  Ogg Vorbis:    .ogg
  Microsoft Wave:    .wav
  Audio Interchange File Format: .aiff / .aif
  Ultimate Soundtracker module:  .mod
  Impulse Tracker module:    .it
  Scream Tracker module: .s3m
  FastTracker 2 module:  .xm







댓글 없음:

댓글 쓰기