2013-04-10 21 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,看看你以前是否寫過這個文件。除此之外,你必須決定什麼構成了「已經存在」的鈴聲。