【问题标题】:Cannot set ringtone无法设置铃声
【发布时间】: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


【解决方案1】:

您似乎正在插入一个已插入MediaStore 的项目。根据提供的日志,提示您在错误提示 UNIQUE constraint failed: files._data (code 2067)_data 字段中输入重复的 _data 字段:

_data=/storage/emulated/0/Akon - Forever (feat. Future) - 320 Kbps - (BossMp3.Me).mp3

可以看看这个question,@CommonsWare 的 cmets 可以帮助你。

【讨论】:

  • 我也猜到了,并尝试注释掉这一行 `Uri newUri = context.getContentResolver().insert(uri, values);然后我检查了我的铃声,我可以看到音频文件的名称设置为铃声。但名称未在微调器(铃声列表)中预设。
  • 我在插入之前删除了该项目,它工作正常。 context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
  • @Rektirino 那么问题仍然存在还是解决了?
猜你喜欢
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2014-03-12
相关资源
最近更新 更多