2013-04-10 23 views
1

在此之后answer如何在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是否已经存在于内容解析器中?我在文件中找不到任何东西。

回答

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 
} 
4

一个内容解析器是只是一些处理您的应用程序和内容提供商之间的互动。

您应该特别关注内容提供商和MediaStore内容提供商。

,当你调用

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

是插入新行到MediaStore你在做什么。 newUri指向这一行。你可以通过调用

long newID=ContentUris.parseId(newUri); 

然而得到该行的 _ID价值,我想你问的是“我怎么知道我是否已经添加了歌曲MediaStore?”我建议你在MediaStore上进行查询。请参阅ContentResolver.query()。

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