当前位置: 首页 > 知识库问答 >
问题:

使用从mediastore.audio.media.data提取的uri删除文件

蒙胤
2023-03-14
    Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection=MediaStore.Audio.Media.IS_MUSIC+"!=0";
    Cursor c=getContentResolver().query(uri,null,selection,null,null);
    if(c!=null)
    {
        c.moveToFirst();

        do {
            String audioName=c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
            String artist=c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            String album=c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM));
            String url=c.getString(c.getColumnIndex(MediaStore.Audio.Media.DATA));
            String size=c.getString(c.getColumnIndex(MediaStore.Audio.Media.SIZE));

            audioInfoArrayList.add(new AudioInfo(url,audioName,artist,album));

        }while (c.moveToNext());

        c.close();
Uri uri= Uri.parse(audioInfo.get(position).getUrl()); //its actually returning the url stored above in string form
deleteFile(uri.getPath());
Log.i("logText","uri.getPath() : "+uri.getPath());
Log.i("logText","audioInfo.get(position).getUrl() : "+audioInfo.get(position).getUrl());
public void deleteFile(String filePath){
    if(filePath.startsWith("content://")){
        ContentResolver contentResolver = context.getContentResolver();
        contentResolver.delete(Uri.parse(filePath), null, null);
    }else {
        File file = new File(filePath);
        if(file.exists()) {
            if (file.delete()) {
                Log.e("logText", "File deleted."); //condition 0
            }else {
                Log.e("logText", "Failed to delete file!");  //condition 1
            }
        }else {
            Log.e("logText", "File not exist!"); //condition 2
        }
    }
} 
01-11 13:52:34.257 19982-19982/com.example.hp.myplayer E/logText: Failed to delete file!
01-11 13:52:34.257 19982-19982/com.example.hp.myplayer I/logText: uri.getPath() : /storage/emulated/0/bluetooth/Copy Copy Fireflies-Owl_City[www.Mp3MaD.Com].mp3
01-11 13:52:34.257 19982-19982/com.example.hp.myplayer I/logText: audioInfo.get(position).getUrl() : /storage/emulated/0/bluetooth/Copy Copy Fireflies-Owl_City[www.Mp3MaD.Com].mp3

注意:在调用deleteFile()时,执行条件1,而不是2或0,根据我的说法,这意味着使用存储中的uri定位文件,但不能删除,并且file.delete()返回false。

共有1个答案

公西国发
2023-03-14

在manifest中请求读写外部存储权限对于Android6及以上版本是不够的。

您应该添加代码来要求应用程序的用户确认所请求的权限。

运行时权限的谷歌。

 类似资料:
  • 我正在使用gradle构建一个Spring Boot应用程序,我希望从war中删除文件,因为该文件将从外部加载(它运行在tomcat容器中,而不是嵌入式的)。 我查看了StackOverflow和Gradle文档,试图找出该做什么,但我不知道该绑定到哪个阶段,以及在创建war之前还是之后排除该文件。处理文件似乎也有多种方法。 我相信Maven使用作为等价物。

  • 如何从最新提交中删除文件?

  • 其中url是RDF/XML web文档。

  • 问题内容: 我需要使用删除Google云端硬盘中的文件。根据我在这里和整个网络上所阅读的内容,“新API”中不支持文件删除。 (仍然)正确吗? 我的意思是API不再是新的了… 我也阅读了“清除内容,然后忘记”的策略,但是我不想遵循这种方法。 问题的第2部分: 鉴于仍然无法通过上述API删除文件;有没有 简单的 方法可以将REST API 与我已经编写的代码结合起来?就像是 从GoogleApiCl

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • 我让troble从Laravel项目中删除一个文件。该文件位于/storage/exports目录下,它是一个使用Laravel excel库存储在磁盘上的excel。这是我的代码: 当我检查文件的存在与file_exist我得到真,所以Laravel是能够读取文件。我还检查了该文件夹的权限,我使用chmod 777给出了该文件夹的所有权限。 谢谢!