2011-10-06 12 views
19

Intento encontrar una solución aquí, pero solo hay solución para el archivo propio/seleccionado, no para el código cuando llamo al selector. Yo uso siguiente código cuando el usuario pulse el botón: selector de tonoCómo configurar el tono de llamada con RingtoneManager.ACTION_RINGTONE_PICKER?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

Este espectáculo, el usuario puede elegir lo que quiere tono, pero echo de menos dos cosas: - que se muestran Indiferente tono de corriente cuando abierta - no guardar melodía de llamada cuando se hace clic en OK


todavía no encuentro manera de cómo abrir RINGTONE_PICKER con el tono de timbre actual ya seleccionada. ¿Alguna idea?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

Respuesta

20

Debe implementar onActivityResult() recibir resultado de la elección del usuario, a continuación, guardarlo.

if (resultCode == RESULT_OK) { 
    Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
    if (uri != null) { 
    String ringTonePath = uri.toString(); 
} 

Aquí un ejemplo: http://www.ceveni.com/2009/07/ringtone-picker-in-android-with-intent.html

EDIT: actualización

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity, 
    RingtoneManager.TYPE_RINGTONE, 
    uri); 

Debe llamar a esto :)

+0

Gracias, pero esto es solo cómo atrapar la ruta. Pero no veo la forma: - cómo guardar esta configuración? - cómo mostrar el tono de llamada actual cuando está abierto? – Michalsx

+0

solo actualiza la fuente, pensé que ya sabías :) –

+0

Querido Xjaphx:) Muchas gracias, me salvaste:) Este código está funcionando como lo necesitaba. – Michalsx

12
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone); 
startActivityForResult(intent , 1); 

"tono" es el URI en el que estoy ahorrando el tono elegido en onActivityResult().

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
     case 1: 
      ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

      // Toast.makeText(getBaseContext(),RingtoneManager.URI_COLUMN_INDEX, 
      // Toast.LENGTH_SHORT).show(); 
      break; 

     default: 
      break; 
     } 
    } 
} 

Espero que te ayude. Hit respondió si lo hace.

+0

¡funciona! Me salvaste el tiempo ... gracias –

+0

Gracias Funciona Pero si agregamos nuestro archivo RAW en el RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI esa selección de tiempo para el sonido predeterminado no se selecciona después de volver a abrir el tono de llamada selector –

+0

puede decirme –

4

El código es perfecto y funciona para mí. Pero olvidaste mencionar los permisos necesarios ... aquí está. intente este código ... espero que ayude

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 
+0

En el dispositivo rooteado, solo necesita el permiso 'android.permission.WRITE_SETTINGS'. No sé sobre dispositivos no rooteados. – ChuongPham

+0

¡Oh, no lo sabía! Thx para la información ..Mine está desarraigada ... Así que tuve que poner los tres para que funcione –

4

Este código mostrará el tono de llamada predeterminado que el usuario establece antes cuando se utiliza el selector de tono de llamada.

Utilice el siguiente código en el botón para la intención de tono de llamada.

public void pickRingtone(View view) { 
     // TODO Auto-generated method. stub 

     Intent intent = new.  Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, 
       RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone"); 

    // for existing ringtone 
     Uri urie =  RingtoneManager.getActualDefaultRingtoneUri(
       getApplicationContext(), RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie); 

    startActivityForResult(intent, 5); 
} 
Cuestiones relacionadas