Запись в папку на Android
Есть кусок кода, который записывает аудиофайл в папку Music на устройстве. Он работает для Android Q и выше. Для версий ниже выдает ошибку из-за строки MediaStore.MediaColumns.RELATIVE_PATH. Как сделать чтобы и для версий ниже все работало? Не очень понимаю как правильно передать параметры.
try {
ContentResolver contentResolver = context.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, recordedFileName);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_MUSIC + File.separator + AppConstants.dirName);
Uri item = contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues);
FileOutputStream fos;
fos = (FileOutputStream) contentResolver.openOutputStream(Objects.requireNonNull(item));
audioWrite(urlPath, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Ошибка ссылается на строку Uri item = contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues);
> java.lang.NullPointerException: Attempt to invoke virtual method 'int > java.lang.String.lastIndexOf(int)' on a null object reference at > android.os.Parcel.readException(Parcel.java:1546) at > android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) > at > android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) > at > android.content.ContentProviderProxy.insert(ContentProviderNative.java:475) > at android.content.ContentResolver.insert(ContentResolver.java:1207) > at > myapp.audiorecorder.utils.AudioRecorder.createFileAndroidQ(AudioRecorder.java:81) > at > myapp.audiorecorder.utils.AudioRecorder.lambda$createFile$0$AudioRecorder(AudioRecorder.java:57) > at > myapp.audiorecorder.utils.-$$Lambda$AudioRecorder$bQvun68TZbcsJBbHjMRDPM4QY2A.run(lambda) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) > at java.lang.Thread.run(Thread.java:818)