将音频文件设置为铃声

djk*_*djk 17 android ringtone

我已将文件保存在sdcard/media/audio/ringtones文件夹中.该文件将出现在铃声选择的settings/sound/phone铃声列表中.

但我想将该文件设置为我的代码中的铃声.这是我的代码.

  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);
Run Code Online (Sandbox Code Playgroud)

uri我在这里但是我得到了newUri = null.我认为这就是为什么它没有设置为铃声.

谁知道问题出在哪里?我该怎么做好newUri

djk*_*djk 36

音频设置为铃声只有一次,但解决这个问题 - 如果你想再次运行相同的代码,你会被插入重复进入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);
Run Code Online (Sandbox Code Playgroud)

  • 天才!谢谢,我一直在搜索有关如何正确查询重复的语法. (2认同)