【问题标题】:How to Delete a single file from media store?如何从媒体存储中删除单个文件?
【发布时间】:2018-05-19 14:01:19
【问题描述】:

此代码有效

getActivity().getContentResolver().
   delete(MediaStore.Audio.Media.EXTERNAL_CONTEN‌​T_URI ,
          "TITLE ='" + songdetails.get(index).song + "'", null); 

但问题是,它会删除所有具有给定标题的文件。我尝试了 DATA 而不是 TITLE,但没有奏效,弹出错误提示“没有名为 DATA 的列”。

任何人都可以就使用什么而不是标题提出任何建议吗?或者任何人都可以告诉我完全不同的方式来删除某些东西。我也试过了,效果很好,

File file = new File(songdetails.get(index).Path);
                 boolean deleted = file.delete();

但问题是媒体存储没有更新

【问题讨论】:

    标签: android mysql


    【解决方案1】:

    在删除函数后试试这一行

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
    

    (从 android 4.4 开始,上述解决方案似乎不起作用)

    对于数据:

    MediaStore.MediaColumns.DATA
    

    你也可以试试这个

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(fileDeleted)));
    

    查看此链接了解(某种)详细方法:

    http://sandersdenardi.com/querying-and-removing-media-from-android-mediastore/

    还要记住:

    所有查询和删除(以及插入和更新) 阻塞直到底层交易完成。你应该执行 ContentResolver 上的这些操作在单独的 线。虽然 MediaStore 上的删除不应该花费大量时间 完全没有时间,如果在主界面上执行,它将阻塞 UI 线程。

    【讨论】:

    • 我为什么要??这将重新扫描整个外部存储,延迟 2-3 秒...
    • 这在 android 4.4.throws securityException 中不起作用
    • 对不起,因为它在 4.4 中不起作用我已经接受了 kalyan 的回答
    • 实际上只有第一个解决方案不适用于 4.4,MEDIA_SCANNER_SCAN_FILR 将适用于 4.4 以及链接中提供的解决方案。
    【解决方案2】:

    做这样的事情..扫描您的文件..只需传递您要删除的文件路径..

    private void scanaddedFile(String path) {
        try {
            MediaScannerConnection.scanFile(context, new String[] { path },
                    null, new MediaScannerConnection.OnScanCompletedListener() {
                        public void onScanCompleted(String path, Uri uri) {
                            context.getContentResolver()
                                    .delete(uri, null, null);
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }
    

    【讨论】:

    • 查看 gaurav 的答案,它是一个单行但无论如何都比 x +1
    • 伙计们,我建议的其他解决方案,特别是 ACTION_MEDIA_SCANNER_SCAN_FILE 适用于 4.4
    • @kalyanpvs 你可能已经赢得了掠夺者的帽子:P(偷一个复选标记)winterbash2013.stackexchange.com
    • 点击顶部菜单成就图标附近的雪花图标,然后点击我爱帽子
    • 这个方法很容易上手,几乎不需要学习。该代码可以很容易地概括并用于从媒体库中添加和删除文件。一个小提示:在我的情况下,需要从媒体库中删除文件之前使用例如物理删除它们文件。删除。否则context.getContentResolver().delete(uri, null, null); 抛出NullPointerException
    【解决方案3】:
    getActivity().getContentResolver().delete(
       MediaStore.Audio.Media.EXTERNAL_CONTEN‌​T_URI ,
       MediaStore.MediaColumns.Data + " = ?", 
        new String[] { fileName });
    

    MediaStore.MediaColumns.DATA 的值为"_data"

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2011-01-04
      相关资源
      最近更新 更多