ContentResolver.insert始终返回null

时间:2014-03-15 05:15:29

标签: android

我正在尝试通过按下按钮设置自定义铃声,但从ContentResolver的insert方法中获取null。以下是可以设置铃声的代码。我检查了stackoverflow本身,一些用户说它为他们工作,但在我的情况下,我得到变量“newUri”为null

声音文件在所需位置创建,所以我知道“newSoundFile”没问题。 在日志中打印“values”变量时,会给出以下结果。

值为title =我的铃声is_notification = true mime_type = audio / mp3 is_alarm = true is_ringtone = true _size = 8733 is_music = false artist = None _data = / mnt / sdcard / media / ringtone / myringtone.mp3

try
{
     uri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath());
     Log.d("Test", uri.toString());
     ContentValues values = new ContentValues();
     values.put(MediaStore.MediaColumns.DATA, newSoundFile.getAbsolutePath());
     values.put(MediaStore.MediaColumns.TITLE, "my ringtone");
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
     values.put(MediaStore.MediaColumns.SIZE, newSoundFile.length());
     values.put(MediaStore.Audio.Media.ARTIST, "None");
     values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
     values.put(MediaStore.Audio.Media.IS_ALARM, true);
     values.put(MediaStore.Audio.Media.IS_MUSIC, false);
     Log.d("Test","Values are "+values.toString());
     newUri = mCr.insert(uri, values);
}
catch (Exception ee)
{
     Log.d("Test", "Exception is " + ee);
}
if(newUri == null)
    Log.d("Test", "newUri is Null");
 else
    Log.d("Test", "newUri is "+newUri.toString());

1 个答案:

答案 0 :(得分:11)

使用此代码。

            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, newSoundFile.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, "my ringtone");
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
            values.put(MediaStore.Audio.Media.ARTIST, "None");
            values.put(MediaStore.MediaColumns.SIZE, 215454);
            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);

            Uri uri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile
                    .getAbsolutePath());
            getContentResolver().delete(
                    uri,
                    MediaStore.MediaColumns.DATA + "=\""
                            + newSoundFile.getAbsolutePath() + "\"", null);
            Uri newUri = getContentResolver().insert(uri, values);

            RingtoneManager.setActualDefaultRingtoneUri(
                    RingtonesPlaying.this, RingtoneManager.TYPE_RINGTONE,
                    newUri);