una tono que por poner para musica llamen llaman llamadas llamada escuchen entrantes cómo cuando como celular canción cancion cambiar android ringtone

que - ¿Cómo puedo cambiar el tono de llamada en Android programáticamente?



cómo poner una canción como tono de llamada (1)

Estoy intentando escribir una aplicación que (entre otras cosas) cambiará el tono de llamada del usuario según su ubicación.

Sin embargo, tengo dificultades para configurar el tono de llamada de mi teléfono desde mi aplicación. He podido mostrar una lista de los tonos de llamada del teléfono y he estado usando el siguiente código para intentar establecer el tono de llamada:

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

donde settings.getRingtoneURI () devuelve una cadena con el URI del tono de llamada deseado.

Cuando ejecuto esto, no recibo ningún error pero el tono de llamada no cambia.

¿Algún consejo?


El código de abajo elige cualquier tono aleatorio desde el móvil para la llamada entrante.

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