【发布时间】:2018-03-11 19:39:37
【问题描述】:
我正在构建一个简单的音频播放器。我已经列出了 sdcard 中的所有歌曲并显示了它。我已经为用户提供了将任何歌曲设置为他们的设备铃声的功能。但是每次我设置铃声时,设备的铃声都会变为“无”。是的,我已授予所需的权限。
应用程序没有崩溃,但在 logcat 中给了我这个错误:
E/SQLiteDatabase: Error inserting artist_id=126 bucket_id=1389444597 is_notification=false date_modified=1520074262 bucket_display_name=0 is_ringtone=true parent=0 format=12297 storage_id=65537 media_type=2 mime_type=audio/mp3 album_id=165 _size=9955517 _data=/storage/emulated/0/Akon - Forever (feat. Future) - 320 Kbps - (BossMp3.Me).mp3 title=My Song title is_music=false date_added=1520796971 is_alarm=false title_key=AYMEC5O9O?1 _display_name=Akon - Forever (feat. Future) - 320 Kbps - (BossMp3.Me).mp3
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: files._data (code 2067)
代码:
public void setRingtone(SongInfoModel song){
if(song != null) {
File k = new File(song.getData());
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Some Artist");
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 = context.getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(
context,
RingtoneManager.TYPE_RINGTONE,
newUri
);
}
【问题讨论】:
-
可能您需要将
RingtoneManager.TYPE_NOTIFICATION更改为RingtoneManager. TYPE_RINGTONE以获取setActualDefaultRingtoneUri方法 -
也试过了
标签: android android-sqlite mediastore ringtone android-music-player