17

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);

ここでuri私は得ていますが、私は得newUri = nullました。それが着信音として設定されていない理由だと思います。

誰が問題がどこにあるか知っていますか? どうすればnewUri適切になりますか?

4

3 に答える 3

36

オーディオが着信音として設定されるのは 1 回だけですが、この問題の解決策は次のとおりです。同じコードを再度実行しようとすると、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);
于 2011-01-06T07:34:42.723 に答える
1
RingtoneManager.setActualDefaultRingtoneUri(
Context,
RingtoneManager.TYPE_RINGTONE,
Uri
.parse("Media file uri"));

これで問題は解決すると思います。

于 2011-01-05T14:07:50.533 に答える