我怎样才能以编程方式更改Android的铃声?

我试图写一个应用程序(除其他外)将根据他们的位置更改用户的铃声

不过,我无法在我的应用中设置手机的铃声。 我已经能够显示手机铃声列表,并且已经使用以下代码来尝试设置铃声:

RingtoneManager.setActualDefaultRingtoneUri(applicationContext, RingtoneManager.TYPE_RINGTONE, MediaStore.Audio.Media.getContentUriForPath(settings.getRingtoneURI())); Settings.System.putString(c.getContentResolver(), Settings.System.RINGTONE, settings.getRingtoneURI()); 

其中settings.getRingtoneURI()返回一个string与所需的铃声的URI。

当我运行这个,我收到没有错误,但铃声不会改变。

有什么build议?

Solutions Collecting From Web of "我怎样才能以编程方式更改Android的铃声?"

下面的代码select来自移动电话的随机铃声来电。

  RingtoneManager rm = new RingtoneManager(context); Random random = new Random(); int i = rm.getRingtonePosition(RingtoneManager .getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE)); MyApplication.APPLICATION_SHARED_PREFERENCE.edit() .putInt(MyConstants.PHONE_RINGTONE_NUMBER, i).commit(); int chanegToneNumber; Cursor cursor = rm.getCursor(); while (true) { chanegToneNumber = random.nextInt(cursor.getCount()); if (chanegToneNumber != i) break; } Log.d(TAG, "Tone: " + i); Log.d(TAG, "Tone total: " + cursor.getCount()); while (cursor.moveToNext()) { if (i == cursor.getInt(cursor .getColumnIndex(MediaStore.MediaColumns._ID))) { RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, rm.getRingtoneUri(chanegToneNumber)); break; } }