在升级到Android R之后,发现没法将音乐添加到playlist了,
找了半天发现是因为没有权限,在Q的时候不需要权限也可以add的.
需要添加权限 android:sharedUserId="android.uid.system"
private void addToPlaylist(ContentResolver resolver, int audioId,
long playlistId) {
Log.d(TAG, "addToPlaylist " + audioId + "; " + playlistId);
String[] cols = new String[]{"count(*)"};
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
cols = new String[]{"count(_data)"};
}
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external",
playlistId);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
Log.d(TAG, "addToPlaylist uri " + uri + "; " + base);
cur.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer
.valueOf(base + audioId));
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
Uri insertUri = resolver.insert(uri, values);
Log.d(TAG, "insertUri: " + insertUri);
}
2021-01-19 02:18:37.160 19429-19429/com.android.soundrecorder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.soundrecorder, PID: 19429
java.lang.SecurityException: com.android.soundrecorder has no access to content://media/external_primary/audio/playlists/54
at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:190)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:549)
at android.content.ContentResolver.insert(ContentResolver.java:2155)
at android.content.ContentResolver.insert(ContentResolver.java:2117)
at com.android.soundrecorder.RecorderMessengerService.addToPlaylist(RecorderMessengerService.java:1342)
at com.android.soundrecorder.RecorderMessengerService.addToMediaDB(RecorderMessengerService.java:1496)
at com.android.soundrecorder.RecorderMessengerService.saveSample(RecorderMessengerService.java:1117)
at com.android.soundrecorder.RecorderMessengerService.stopRecording(RecorderMessengerService.java:2008)
at com.android.soundrecorder.RecorderMessengerService$IncomingHandler.handleMessage(RecorderMessengerService.java:463)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7700)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
打印的日志
2021-01-19 01:06:33.420 14697-14697/com.android.soundrecorder D/SoundRecorder_SoundRecorder: insert uri: content://media/external/audio/media/201
2021-01-19 01:06:33.448 14697-14697/com.android.soundrecorder W/SoundRecorder_SoundRecorder: addToPlaylistisa 201; 54
2021-01-19 01:06:33.449 14697-14697/com.android.soundrecorder W/SoundRecorder_SoundRecorder: addToPlaylistisa uri content://media/external/audio/playlists/54/members