Configuración de tono en Android

Posible duplicado:
Cómo configurar ringtone en Android de mi actividad?

Tengo sonidos archivos en mi carpeta res / raw y quiero seleccionar un sonido para establecer como un tono de llamada en el clic de un botón. ¿Me pregunto cómo puedo hacer eso?

@Maxood

El código de @Clive es lo que necesita para establecer el tono de llamada. Necesitará la ruta absoluta al archivo, que no puede obtener de un recurso sin formato.

La solución es obtener el recurso de archivo de recursos y escribirlo en el sdcard primero, antes de darlo a la resolución de contenido para la inserción.

File newSoundFile = new File("/sdcard/media/ringtone", "myringtone.oog"); Uri mUri = Uri.parse("android.resource://com.your.package/R.raw.your_resource_id"); ContentResolver mCr = app.getContentResolver(); AssetFileDescriptor soundFile; try { soundFile= mCr.openAssetFileDescriptor(mUri, "r"); } catch (FileNotFoundException e) { soundFile=null; } try { byte[] readData = new byte[1024]; FileInputStream fis = soundFile.createInputStream(); FileOutputStream fos = new FileOutputStream(newSoundFile); int i = fis.read(readData); while (i != -1) { fos.write(readData, 0, i); i = fis.read(readData); } fos.close(); } catch (IOException io) { } 

A continuación, puede utilizar la solución publicada anteriormente

  ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, newSoundFile.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "my ringtone"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/oog"); values.put(MediaStore.MediaColumns.SIZE, newSoundFile.length()); values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); values.put(MediaStore.Audio.Media.IS_ALARM, true); values.put(MediaStore.Audio.Media.IS_MUSIC, false); Uri uri = MediaStore.Audio.Media.getContentUriForPath(newSoundFile.getAbsolutePath()); Uri newUri = mCr.insert(uri, values); try { RingtoneManager.setActualDefaultRingtoneUri(getContext(), RingtoneManager.TYPE_RINGTONE, newUri); } catch (Throwable t) { Log.d(TAG, "catch exception"); } 

No se olvide de escribir el permiso

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

En su manifiesto

espero que esto ayude

Pruebe esto, funciona para mí:

 ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, <<asbolutePathToYourAudioFileHere>>); values.put(MediaStore.MediaColumns.TITLE, "<<yourRingToneNameHere>>"); values.put(MediaStore.MediaColumns.SIZE, k); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mpeg"); // assuming it's an mpeg, of course values.put(MediaStore.Audio.Media.ARTIST, "<<yourArtistNameHere>>"); // values.put(MediaStore.Audio.Media.DURATION, duration); // doesn't appear to be necessary if you don't know values.put(MediaStore.Audio.Media.IS_RINGTONE, true); Uri uri = MediaStore.Audio.Media.getContentUriForPath(outPath); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( <<MyActivity>>.this, RingtoneManager.TYPE_RINGTONE, newUri); 

Esperemos que por ahora usted ha conseguido su programa de trabajo de la manera que quería. Sólo para el registro, sin embargo, usted debe buscar en guardar el archivo en la tarjeta sdcard en una carpeta de tonos. Asegúrese de que es más bajo, ya que importa en Android.

Yo uso "Rings Extended" http://www.androidapps.com/t/rings-extended

Con esa aplicación instalada cuando vayas a cambiar tu tono, tendrás la opción de seleccionar Rings Extended. También utilice "Ringdroid" para editar tonos de llamada.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.