androidandroid-8.1-oreoandroid-mediascannerandroid-drm

Android 8.1 lost responsiveness


When I launch my application after upgrading from android 7 to 8.1 I noticed that it lost a lot of responsiveness.

When I'm trying to get songs from device memory I get a lot of errors like:

E/SEC_DRM_PLUGIN_Omafl: OmaPlugin::onOpenDecryptSession(fd)::Drm2IsDrmFileByExtFd::file is NOT DRM by extension

That works much slower than on the Android 7.

Code:

public ArrayList<Song> getSongList() {
    MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever();
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
    ArrayList<Song> songList = new ArrayList<>();
    ContentResolver musicResolver = context.getContentResolver();
    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, selection, null, null);

    if (musicCursor != null && musicCursor.moveToFirst()) {
        int titleColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
        int durationColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
        int column_index = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA);

        do {
            long id = musicCursor.getLong(idColumn);
            String path = musicCursor.getString(column_index);
            String title = musicCursor.getString(titleColumn);
            String artist = musicCursor.getString(artistColumn);
            String duration = musicCursor.getString(durationColumn);

            try {
                metaRetriver.setDataSource(path);
                songList.add(new Song(id, title, artist, path, duration));
            }catch (Exception exc){}

        } while (musicCursor.moveToNext());
    }
    return songList;
}

Solution

  • I had to delete the one line of code that was causing the error when trying to get every single song from memory:

    mediaMetadataRetriver.setDataSource(pathOfSong);
    

    Hope it will help you.