关于如何在Android活动中设置铃声的answer之后,我正在使用此代码:
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?我在文件中找不到任何东西。
答案 0 :(得分:5)
内容解析器只是处理您的应用与内容提供商之间互动的内容。
您应该关注内容提供商,特别是MediaStore内容提供商。
致电时正在做什么
Uri newUri = main.getContentResolver().insert(uri, values);
在MediaStore中插入新行。 newUri指向这一行。你可以获得行 _ID值通过调用
long newID=ContentUris.parseId(newUri);
但是,我认为你所问的是“如果我已经向MediaStore添加了一首歌,我该怎么说?”我建议您在MediaStore上进行查询。请参阅ContentResolver.query()。
如果我这样做,我会查询MediaColumns.DATA,看看你以前是否写过该文件。除此之外,你必须决定什么构成了“已经存在”的铃声。
答案 1 :(得分: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
}
答案 2 :(得分:0)
如果您不想插入新值,请使用ContentResolver.update()和适当的where子句来更新现有值。