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 无法访问内容://媒体/外部/音频/媒体的主要内容,如果未能解决你的问题,请参考以下文章