2

按照这个关于如何在 android 活动中设置铃声的答案,我正在使用以下代码:

File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.SIZE, 215454);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, 230);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

//Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(
  myActivity,
  RingtoneManager.TYPE_RINGTONE,
  newUri
);

但是,每次我运行我的程序时,这都会在我的内容解析器中创建一个新条目。如何检查内容解析器中是否已存在 Uri?我在文档中找不到任何东西。

4

3 回答 3

5

内容解析器只是处理您的应用程序和内容提供者之间的交互的东西。

您应该查看内容提供程序,尤其是 MediaStore 内容提供程序。

当你打电话时你在做什么

Uri newUri = main.getContentResolver().insert(uri, values);

正在向 MediaStore 中插入新行。newUri 指向这一行。您可以通过调用获取行的 _ID 值

long newID=ContentUris.parseId(newUri);

但是,我认为您要问的是“我如何判断我是否已经将歌曲添加到 MediaStore?” 我建议您在 MediaStore 上进行查询。请参阅 ContentResolver.query()。

如果我这样做了,我会查询 MediaColumns.DATA,看看你之前是否写过那个文件。除此之外,您还必须决定什么构成“已经存在”的铃声。

于 2013-04-10T18:38:51.447 回答
2

你可以简单地查询这个 Uri

Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
if (c.getCount == 1) {
    // already inserted, update this row or do sth else
} else {
    // row does not exist, you can insert or do sth else
}
于 2013-04-10T18:32:45.123 回答
0

如果您不想插入新值,请使用ContentResolver.update()和合适的 where 子句来更新现有值。

于 2013-04-10T18:30:49.123 回答