2012-11-30 170 views
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 

回答

2

已解决,此代码删除以前具有相同标题的条目:

getContentResolver().delete(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"TITLE='MyTitle'", null);