2
我試圖用MP3文件替換用戶的鈴聲。鈴聲文件按需生成並且其內容發生變化;但是,我需要保證文件名和它的標題(出現在鈴聲列表中)保持不變。因爲ContentResolver.insert()返回一個NullPointerException異常;當我嘗試第二次添加鈴聲時,dificculties會啓動,因爲ContentResolver.insert()返回一個NullPointerException異常;從我測試過的情況來看,這是因爲已經有一個文件在數據或標題列中註冊了相同的值(如果確實存在的話,我仍然無法弄清楚導致問題的原因)。無法從MediaStore中刪除
所以我試圖從MediaStore中刪除條目,但沒有多少成功,因爲delete()返回0,並且條目保留在MediaStore中。我已經試過兩件事情:
嘗試#1不刪除該條目
getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,"TITLE='TestRing'",null);
嘗試#2還沒有刪除的條目
final String[] ringColumns = { MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.TITLE,MediaStore.MediaColumns._ID };
final String ringOrderBy = MediaStore.Audio.Media._ID+" DESC";
final String ringWhere = MediaStore.Images.Media.TITLE+"=?";
final String[] ringArguments = { "TestRing" };
Cursor ringCursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, ringColumns, ringWhere, ringArguments, ringOrderBy);
if(ringCursor.getCount()>1)
{
while(ringCursor.moveToNext())
{
int id = ringCursor.getInt(ringCursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title = ringCursor.getString(ringCursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
if(title.equals("TestRing"))
{
ContentResolver cr = getContentResolver();
retVal += cr.delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, MediaStore.Audio.Media._ID + "="+id, null);
break;
}
}
}
這是我用於在媒體商店創建條目的代碼,如果不存在條目,則工作正常:
File fOut = new File("/mnt/sdcard/media/audio/ringtones/newRingtone.mp3");
if(fOut.exists())
fOut.delete();
ContentValues content = new ContentValues();
content.put(MediaStore.Audio.Media.IS_RINGTONE, true);
content.put(MediaStore.MediaColumns.DATA,fOut.getAbsolutePath());
content.put(MediaStore.MediaColumns.TITLE, "TestRing");
content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
Uri uri = MediaStore.Audio.Media.getContentUriForPath(fOut.getAbsolutePath());
Uri newUri = getContentResolver().insert(uri, content); //insert returns null on the 2nd insertion