在Android MediaStore中插入音频专辑

3

我找不到有关如何在MediaStore中插入相册的任何信息,我尝试使用

Uri uri = contentResolver.insert(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumValues);

但是我收到了一个异常,显示“无效的 URI”。这个 URI 可以用于检索相册,但我无法使用它来插入相册。
下面是其余的代码:
ContentResolver contentResolver = getActivity().getContentResolver();
ContentValues albumValues = new ContentValues();
albumValues.put(Audio.Albums.ALBUM, mAlbumEditText.getText().toString());
albumValues.put(Audio.Albums.ARTIST, mArtistEditText.getText().toString());
int trackNo = 10;
albumValues.put(Audio.Albums.NUMBER_OF_SONGS, trackNo);
Uri uri = contentResolver.insert(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, albumValues);

错误日志: 02-24 22:38:19.876: E/AndroidRuntime(5379): java.lang.UnsupportedOperationException: 无效的URI content://media/external/audio/albums

你能发一下你的ContentValues的其余部分吗?这样可以帮助我们看看是否缺少重要的内容。 - Grant Amos
异常是UnsupportedOperationException吗?无论如何,请发布显示错误的日志。 - Geobits
如果我将uri更改为不存在的内容,它会给我另一个异常,说“未知的uri”,因此该uri存在,我也可以在其上使用.query(...)。 我猜相册是以其他方式插入的,但我找不到任何关于它的文档片段。 - Jelly
1
请查看我的更新答案。 - Grant Amos
1个回答

1
如果文件夹不存在,您需要创建该文件夹,并将其附加到您的URI中。
//Create album folder if it doesn't exist
mImageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "MyAlbumName");
//Retrieve the path with the folder/filename concatenated
mImageFilePath = new File(mImageDir, "NameOfImage").getAbsolutePath();

//Create new content values
ContentValues values = new ContentValues();
values.put(MediaStore.Images.ImageColumns.DATA, mImageFilePath);
//Add whatever other content values you need
....
mUri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

编辑:

您缺少ContentValues的DATA部分。这指定了实际的文件路径,是必需的。

mAudioDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_MUSIC), "MyNewAlbumName");
mAudioFilePath = new File(mAudioDir, "myNewAudioFile.mp3").getAbsolutePath();

//This part is what you're missing
albumValues.put(MediaStore.Audio.AudioColumns.DATA, mAudioFilePath);

1
抱歉我没有表达清楚,我指的是音乐专辑。 - Jelly
1
您不能添加空相册。插入歌曲时,应根据MP3标签自动添加相册。您究竟想实现什么?你想添加空相册吗?目标是什么? - Grant Amos
我正在尝试更新歌曲标签,ID3标签已经更新,但由于音乐播放器使用MediaStore,所以更改在其中不可见。我已能够更新代表音频文件的Audio.Media 中的数据,但是无法为该歌曲插入专辑。我正在测试是否现在自动插入专辑... - Jelly
它们不会自动添加,它们会出现在“Audio.Media”中,但不会出现在“Audio.Albums”中。 - Jelly
1
很抱歉,我不太确定该如何帮忙。当您使用ContentResolver添加值时,它们会被添加到表中。您当前遇到的错误是,您输入的数据缺少“DATA”值,该值指的是文件的路径。没有这个值,数据无法形成与适当音频文件的链接。在这里发帖:http://stackoverflow.com/questions/21996228/mediastore-audio-albums-album-id-invalid-column 您可以访问DATA列。检索该值,将其放入新值中,然后执行resolver.insert(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, values)。 - Grant Amos
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接