@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 procesar.
La solución es obtener el activo del archivo de recursos y escribirlo en la sdcard primero, antes de entregarlo al solucionador de contenido para su 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) {
}
continuación, puede utilizar la solución previamente publicado
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
¿Alguna vez ha encontrado una solución? – vondip
¡Esto no es un duplicado! esto habla sobre la configuración de un tono de llamada de un archivo sin formato. El otro es simplemente cómo configurar un tono de llamada que ya está en la tarjeta sd. Por favor reabre, tengo una solución completa. – ozmike