public static void updateLibrary(Context context, boolean rebuildStats) { Log.d(TAG, "updateLibrary() start"); Realm realm = Realm.getInstance(Migration.getConfig(context)); realm.beginTransaction(); RealmResults<Track> res = realm.where(Track.class).findAll(); for (int x = 0; x < res.size(); x++) { res.get(x).setIsAvailable(false); } realm.commitTransaction(); String where = MediaStore.Audio.Media.IS_MUSIC + " = 1"; String[] selectionArgs = null; String orderBy = MediaStore.Audio.Media.DEFAULT_SORT_ORDER; ContentResolver contentResolver = context.getContentResolver(); Cursor[] cursors = new Cursor[2]; cursors[0] = contentResolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, TRACK_COLUMNS, where, selectionArgs, orderBy); cursors[1] = contentResolver.query( MediaStore.Audio.Media.INTERNAL_CONTENT_URI, TRACK_COLUMNS, where, selectionArgs, orderBy); Cursor cursor = new MergeCursor(cursors); int idColumn = cursor.getColumnIndex(MediaStore.Audio.Media._ID); int displayNameColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME); int titleColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE); int titleKeyColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE_KEY); int durationColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION); int trackColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TRACK); int artistColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); // int dateAddedColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED); int dataColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATA); int albumColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM); int albumIdColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); int albumKeyColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_KEY); realm.beginTransaction(); while (cursor.moveToNext()) { int minimumDurationToConsiderAsSong = 61500; Track track = null; String local_id = Track.getLocalId( cursor.getString(titleColumn), cursor.getString(artistColumn), cursor.getString(albumColumn)); Track res2 = realm.where(Track.class).equalTo("local_id", local_id).findFirst(); if (res2 != null) { if (cursor.getInt(durationColumn) < minimumDurationToConsiderAsSong) { res2.removeFromRealm(); } else { track = res2; track.setIsAvailable(true); if (!track.isHidden()) { if (rebuildStats) { rebuildStats(context, track.getLocal_id()); } } } } else { if (cursor.getInt(durationColumn) > minimumDurationToConsiderAsSong) { // Log.d(TAG, "hi6 - means its a new record"); // Log.d(TAG, "cursor.getString(titleColumn): " + // cursor.getString(titleColumn)); // Log.d(TAG, "cursor.getString(artistColumn): " + // cursor.getString(artistColumn)); // Log.d(TAG, "cursor.getString(albumColumn): " + // cursor.getString(albumColumn)); track = new Track( cursor.getString(titleColumn), cursor.getString(artistColumn), cursor.getString(albumColumn), cursor.getString(dataColumn)); track.setId(cursor.getLong(idColumn)); track.setDisplayName(cursor.getString(displayNameColumn)); track.setTitleKey(cursor.getString(titleKeyColumn)); track.setDuration(cursor.getInt(durationColumn)); track.setTrackNo(cursor.getInt(trackColumn)); track.setAlbumId(cursor.getString(albumIdColumn)); track.setAlbumKey(cursor.getString(albumKeyColumn)); track = realm.copyToRealm(track); } } if (track != null) { track.setPath(cursor.getString(dataColumn)); } } realm.commitTransaction(); cursor.close(); Log.d(TAG, "updateLibrary() end"); }