I am building an mp3 player on android using react native and I want to be able to scan my phone for music files that I can play using react-native-track-player. To do this, I built a module Name MusicScannerModule.java
package com.musicplayer;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.Arguments;
public class MusicScannerModule extends ReactContextBaseJavaModule {
private final ReactApplicationContext reactContext;
public MusicScannerModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
}
@Override
public String getName() {
return "MusicScanner";
}
@ReactMethod
public WritableArray scanMusic() {
WritableArray musicList = Arguments.createArray();
ContentResolver contentResolver = this.reactContext.getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DURATION,
};
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
WritableMap musicInfo = Arguments.createMap();
musicInfo.putString("title", cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
musicInfo.putString("artist", cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)));
musicInfo.putString("uri", cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
musicList.pushMap(musicInfo);
}
cursor.close();
}
return musicList;
}
}
and MusicScannerPackage.java
package com.musicplayer;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
public class MyCustomPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new MusicScannerModule(reactContext));
return modules;
}
}
But the code doesn't seem to work. I want to know if I got anything wrong or if there is any other react native dependency that I can use to achieve the same result