From 4ed4cd0fab324793bf61686cf8069986429a678c Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sun, 18 Dec 2016 11:50:59 +0100 Subject: [PATCH] implement startNativeLibraryScan() --- .../android/medialibrary/MediaLibrary.java | 1 + .../android/medialibrary/MediaScanner.java | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java index c102413d..27d084f0 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaLibrary.java @@ -66,6 +66,7 @@ public class MediaLibrary { sBackend = new MediaLibraryBackend(context); sScanner = new MediaScanner(sBackend); + sScanner.startNativeLibraryScan(context); sScanner.startUpdateScan(); for (File dir : discoverMediaPaths()) { sScanner.startFullScan(dir); diff --git a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java index 5ac6a422..a5ff6b05 100644 --- a/src/ch/blinkenlights/android/medialibrary/MediaScanner.java +++ b/src/ch/blinkenlights/android/medialibrary/MediaScanner.java @@ -18,10 +18,12 @@ package ch.blinkenlights.android.medialibrary; import ch.blinkenlights.bastp.Bastp; +import android.content.Context; import android.content.ContentValues; import android.database.Cursor; import android.media.MediaMetadataRetriever; import android.util.Log; +import android.provider.MediaStore; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; @@ -78,6 +80,8 @@ public class MediaScanner implements Handler.Callback { /** * Performs a full check of the current media library, scanning for * removed or changed files + * + * @param context the context to use */ void startUpdateScan() { Cursor cursor = mBackend.query(false, MediaLibrary.TABLE_SONGS, new String[]{MediaLibrary.SongColumns.PATH}, null, null, null, null, null, null); @@ -85,6 +89,17 @@ public class MediaScanner implements Handler.Callback { mHandler.sendMessage(mHandler.obtainMessage(MSG_UPDATE_LIBRARY, 0, 0, cursor)); } + /** + * Queries all items found in androids native media database + */ + void startNativeLibraryScan(Context context) { + String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0"; + String[] projection = { MediaStore.MediaColumns.DATA }; + Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null); + if (cursor != null) + mHandler.sendMessage(mHandler.obtainMessage(MSG_UPDATE_LIBRARY, 0, 0, cursor)); + } + private static final int MSG_SCAN_DIRECTORY = 1; private static final int MSG_ADD_FILE = 2; private static final int MSG_UPDATE_LIBRARY = 3; @@ -117,8 +132,11 @@ public class MediaScanner implements Handler.Callback { case MSG_UPDATE_LIBRARY: { Cursor cursor = (Cursor)message.obj; while (cursor.moveToNext()) { - File update = new File(cursor.getString(0)); - mHandler.sendMessage(mHandler.obtainMessage(MSG_ADD_FILE, 0, 0, update)); + String path = cursor.getString(0); + if (path != null) { + File update = new File(path); + mHandler.sendMessage(mHandler.obtainMessage(MSG_ADD_FILE, 0, 0, update)); + } } cursor.close(); break;