最后,我设法将默认铃声设置为我下载的铃声。
下面不包含下载代码,仅包含将其设置为默认铃声所需的代码。
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 = this.getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(
myActivity,
RingtoneManager.TYPE_RINGTONE,
newUri
);
无论如何,我不完全理解这段代码在做什么。
铃声管理器需要要设置为新铃声的文件的 uri。但是这个uri不能像“/sdcard/media/ringtones/mysong.mp3”一样直接指向sdcard。那不行!
您需要的是文件的外部文件 uri,可能类似于
“/外部/音频/媒体/46”
46是MediaStore数据库中列的id,所以这就是为什么你需要首先将sdcard文件添加到数据库中。
无论如何,mediastore 如何维护它的 id?当您多次执行此操作时,该数字可能会变得非常高。
我需要自己删除这一行吗?问题是,有时我什至无法控制文件的删除,因为可以使用文件浏览器直接从 SD 卡中删除它。