RecoverableSecurityException 无法访问内容://媒体/外部/音频/媒体

Posted

技术标签:

【中文标题】RecoverableSecurityException 无法访问内容://媒体/外部/音频/媒体【英文标题】:RecoverableSecurityException no access to content://media/external/audio/media 【发布时间】:2021-03-29 07:11:42 【问题描述】:

我有一个音乐播放器应用程序,当我尝试删除文件时它曾经工作。但是,从 API 29 开始,当我尝试通过 contentResolver.delete 删除文件时出现以下错误。

android.app.RecoverableSecurityException: 音乐播放器无权访问内容://media/external/audio/media/1324

 AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setMessage("Are you sure you want to delete " + mSongList.get(selectedPosition).getSongName());
alert.setPositiveButton("YES", new OnClickListener() 
        @Override
        public void onClick(DialogInterface dialog, int which) 
            ContentResolver contentResolver = getActivity().getContentResolver();
                                    contentResolver.delete(mSongList.get(selectedPosition).getSongUri(), null, null);
        mSongList.remove(selectedPosition);
        mAdapterListFile.notifyDataSetChanged();
        serviceMusic.setSongList(mSongList);
            dialog.dismiss();
        
    );
    alert.setNegativeButton("NO", new OnClickListener() 
            @Override
            public void onClick(DialogInterface dialog, int which) 
                    dialog.dismiss();
                    
                );

    alert.show();

【问题讨论】:

看起来与:***.com/a/59736650/5482166 是的,但我可以用其他人的应用程序来做到这一点。使用他们的应用程序,我能够删除该文件。在新 API 中我的删除方法有什么替代方法吗? 【参考方案1】:

您应该从异常中获取recoverableSecurityException.userAction.actionIntent.intentSender,并使用Activity.startIntentSenderForResult() 获得删除文件的权限。 检查这个示例项目: https://github.com/android/storage-samples/tree/main/MediaStore

【讨论】:

链接的项目是用 Kotlin 编写的,OP 要求用 Java。您能否提供 Java 代码 - 或 Java 代码的链接?

以上是关于RecoverableSecurityException 无法访问内容://媒体/外部/音频/媒体的主要内容,如果未能解决你的问题,请参考以下文章