将audio文件设置为铃声

我有保存在sdcard/media/audio/ringtone文件夹中的文件。 该文件将出现在settings/sound/phone铃声的铃声select列表中。

但是我想将该文件设置为来自我的代码的铃声。 这是我的代码。

  File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "TwiAppclip"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); values.put(MediaStore.Audio.Media.ARTIST, "cssounds "); 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(k .getAbsolutePath()); Uri newUri = getApplicationContext().getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri); 

这里我得到了但是我得到了newUri = null 。 我想这就是为什么它没有设置为铃声。

任何人都知道问题在哪里? 我如何得到newUri正确?

Solutions Collecting From Web of "将audio文件设置为铃声"

audio只能设置为铃声一次,但解决这个问题的方法是 – 如果你想再次运行相同的代码,你将会在MediaStore的表中插入一个重复的条目,但是SQLite数据库不允许你。 您必须重命名您的文件并添加另一个实例,或者进入,删除条目,然后重试。 所以我每次都删除那个条目,然后再插入一次。

 Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(activity.this, RingtoneManager.TYPE_RINGTONE, newUri); 

不要删除以前插入的uri,你可以重用它:

  // check if file already exists in MediaStore String[] projection = {MediaStore.Audio.Media._ID}; String selectionClause = MediaStore.Audio.Media.DATA + " = ? "; String[] selectionArgs = {ringtoneFile.getAbsolutePath()}; Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selectionClause, selectionArgs, null); Uri insertedUri; if (cursor == null || cursor.getCount() < 1) { // not exist, insert into MediaStore ContentValues cv = new ContentValues(); cv.put(MediaStore.Audio.Media.DATA, ringtoneFile.getAbsolutePath()); cv.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName()); insertedUri = context.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cv); } else { // already exist cursor.moveToNext(); long id = cursor.getLong(0); insertedUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id); } RingtoneManager.setActualDefaultRingtoneUri(context, type, insertedUri); 
 RingtoneManager.setActualDefaultRingtoneUri( Context, RingtoneManager.TYPE_RINGTONE, Uri .parse("Media file uri")); 

我认为这将解决你的问题。