重新安装后无法再删除mediaStore项目

问题描述 投票:0回答:1

与 Android 平台 API 30 至 35 相关的问题,应用程序面向 API 33 我的android应用程序的工作是将计算机上的用户音乐库同步到android。这包括向 Android 添加音乐、视频等媒体以及删除。 安装应用程序时,添加和删除功能有效,但是在重新安装时,应用程序可以在同步期间添加其他文件,但如果由于用户从计算机的库中删除了媒体而需要删除项目,则会失败。 Android 中无法删除 MediaItems。有几十个文件需要添加或删除,有时甚至有数百个。添加和删除的函数如下

据我了解,自 api 29/30 起,如果重新安装应用程序,它将失去其文件的所有权。但是当用户重新安装应用程序时,它没有任何意义,所有以前存储的内容都将被忽略并使用新目录重新同步,如何解决这个问题,最好的解决方案是什么。

   void addAudioToMediaStore(InputStream inStream) {      
    // Code to an audio media to mediastore
    Uri audioCollection = MediaStore.Audio.Media
                .getContentUri(MediaStor
    ContentValues songDetails = new ContentValues();
    songDetails.put(MediaStore.Audio.Media.DISPLAY_NAME,
            filename);

    songDetails.put(MediaStore.Audio.Media.RELATIVE_PATH,
            String.format("Music/Library/%s/%s/",artist,album));

    songDetails.put(MediaStore.Audio.Media.IS_PENDING, 1);

    Uri songContentUri = resolver
            .insert(audioCollection, songDetails);

    byte[] buffer = new byte[1024 * 250];
    long nTotalBytes = 0;

    try
    {
        OutputStream os = resolver.openOutputStream(songContentUri, "rw");

        while (nTotalBytes != size)
        {
            int nRead = inStream.read(buffer, 0, buffer.length);

            if (nRead >= 0) {
                os.write(buffer, 0, nRead);
                nTotalBytes += nRead;
            } else {
                Log.d("TEST API 30-35 MEDIASTORE", String.format("Warning() read returned -1"));
                                   break;
            }

        }

        os.flush();
        os.close();

    } catch (Exception e) {
        throw new RuntimeException(e);
    }finally {
     return false;

    }
    songDetails.clear();
    songDetails.put(MediaStore.Audio.Media.IS_PENDING, 0);
    int result  = resolver.update(songContentUri, songDetails, null, null);
    
    return true;
}

并删除这样的作品

 public int deleteMediaStoreRecords(String artist, String album, String filename) {

    Uri audioCollection = MediaStore.Audio.Media
                .getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
   

    String relativePath = "%Library/"+artist+"/"+album+"%";
    String selection = MediaStore.Audio.Media.DISPLAY_NAME + " LIKE ?" + " AND " + MediaStore.Audio.Media.RELATIVE_PATH + " LIKE ?" ;
    // TODO This will break if we have no matching item in the MediaStore.
    int numDeleted = context.getContentResolver().delete(audioCollection,
            selection,
            new String[]{filename,relativePath}
            );

    return numDeleted;
    }
android mediastore
1个回答
0
投票

查询 mediaStore 中的文件,找到您的文件并请求删除

创建删除请求

© www.soinside.com 2019 - 2024. All rights reserved.