usar una tono que poner para musica llamen llaman llamadas llamada escuchen entrantes entrante cuando como cancion android ringtone

android - una - configuración de archivo de audio como tono de llamada



tono llamada entrante (3)

He guardado el archivo en la carpeta sdcard/media/audio/ringtone s. Ese archivo aparecerá en la lista de selección de tonos de timbre de la settings/sound/phone timbre del settings/sound/phone .

Pero quiero establecer ese archivo como tono de llamada de mi código. Aquí está mi código.

File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "TwiAppclip"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); values.put(MediaStore.Audio.Media.ARTIST, "cssounds "); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC, false); Uri uri = MediaStore.Audio.Media.getContentUriForPath(k .getAbsolutePath()); Uri newUri = getApplicationContext().getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);

aquí uri estoy recibiendo Pero tengo newUri = null . Creo que es por eso que no está configurando como tono de llamada.

¿Alguien sabe dónde está el problema? ¿Cómo puedo obtener newUri apropiado?


El audio se establece como tono de llamada solo una vez, pero la solución a este problema es: si intenta ejecutar el mismo código nuevamente, insertará una entrada duplicada en la tabla de MediaStore, pero la base de datos SQLite no lo permitirá. Debe cambiar el nombre de su archivo y agregar otra instancia, o ingresar, eliminar la entrada y volver a intentarlo. Así que quité esa entrada cada vez y luego la inserto de nuevo.

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=/"" + k.getAbsolutePath() + "/"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(activity.this, RingtoneManager.TYPE_RINGTONE, newUri);


En lugar de eliminar el uri insertado anteriormente, puede reutilizarlo:

// check if file already exists in MediaStore String[] projection = {MediaStore.Audio.Media._ID}; String selectionClause = MediaStore.Audio.Media.DATA + " = ? "; String[] selectionArgs = {ringtoneFile.getAbsolutePath()}; Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selectionClause, selectionArgs, null); Uri insertedUri; if (cursor == null || cursor.getCount() < 1) { // not exist, insert into MediaStore ContentValues cv = new ContentValues(); cv.put(MediaStore.Audio.Media.DATA, ringtoneFile.getAbsolutePath()); cv.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName()); insertedUri = context.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cv); } else { // already exist cursor.moveToNext(); long id = cursor.getLong(0); insertedUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id); } RingtoneManager.setActualDefaultRingtoneUri(context, type, insertedUri);


RingtoneManager.setActualDefaultRingtoneUri( Context, RingtoneManager.TYPE_RINGTONE, Uri .parse("Media file uri"));

Creo que esto va a resolver su problema.