How to add a song to a playlist in android

在升级到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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
using System; using System.Collections.Generic; public class PlaylistApp { public static void Main(string[] args) { LinkedList<string> playlist = new LinkedList<string>(); Stack<string> history = new Stack<string>(); Scanner scanner = new Scanner(System.in); while (true) { Console.WriteLine("Choose an option:"); Console.WriteLine("1. Add a song to your playlist"); Console.WriteLine("2. Play the next song in your playlist"); Console.WriteLine("3. Skip the next song"); Console.WriteLine("4. Rewind one song"); Console.WriteLine("5. Exit"); string input = scanner.nextLine(); if (input.Equals("1")) { Console.WriteLine("Enter Song Name:"); string song = scanner.nextLine(); playlist.AddLast(song); Console.WriteLine(""" + song + "" added to your playlist."); } else if (input.Equals("2")) { if (playlist.Count > 0) { string song = playlist.RemoveFirst(); history.Push(song); Console.WriteLine("Now playing "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("3")) { if (playlist.Count > 0) { string song = playlist.RemoveFirst(); Console.WriteLine("Skipped "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("4")) { if (history.Count > 0) { string song = history.Pop(); //JAVA TO C# CONVERTER TASK: There is no .NET LinkedList equivalent to the 2-parameter Java 'add' method: playlist.add(0, song); Console.WriteLine("Rewound to "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("You haven't played any songs yet."); } } else if (input.Equals("5")) { Console.WriteLine("Goodbye!"); break; } else { Console.WriteLine("Invalid input."); } } scanner.close(); } } 修改代码
06-10
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值