2011-03-23 39 views
7

Estoy usando RingtoneManager, y aparentemente en algunos teléfonos devuelve null todo el tiempo. Sé que devuelve nulo si el sonido es silencioso o no puede encontrar el tono. ¿Por qué no se devolverá null si el sonido está activado y hay un tono? El código funciona en mi Nexus s ....RingtoneManager return null ringtone

Aquí es lo que estoy utilizando:

Ringtone ringtone; 
ringtone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
if(ringtone == null) 
{ 
    Log.d("Debug", "ringtone is null"); 
} 
else 
{ 
    ringtone.play(); 
} 

He habilitado para jugar tono de llamada (funciona en mi teléfono) e incluso tienen permisos para tarjetas SD todos los permisos habilitado solo en caso de que el tono de llamada esté en la tarjeta SD. ¿Alguna idea?

+0

Según el código fuente para RingtoneManager, el único caso en el que getRingtone devuelve null es cuando no se puede abrir el tono de llamada en el URI dado. También debería poner una línea con '" Error al abrir el tono de llamada "+ ringtoneUri' en logcat. ¿Estás viendo esas líneas en tu salida de logcat? –

+0

No en el mío, pero algunos usuarios se quejan de que el tono de llamada no se está disparando. Antes de tener la verificación NULL, se bloqueaba debido a un puntero desreferenciado. Lo único que creo que puedo asumir es que no podría obtener un URI ... Pero no sé por qué no podría hacer eso cuando tengan un tono de llamada válido. Tal vez un bloqueo de recursos? – atomicbaum

Respuesta

8

Caigo en lo que es el problema. Si el usuario tiene "Silencio" como sonido de notificación de la función:

RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 

vuelve null. Y eso explica por qué solo algunos usuarios encuentran este problema.

+0

Esta respuesta me salvó algunas horas. Resulta que el AVD que estaba usando tiene todos los ajustes de sonido en silencio en todos los ámbitos. Luego leí la respuesta anterior y descubrí que la aplicación funciona en mi teléfono real. – Lori

8

Si copia un sonido costum en su teléfono que está almacenado en el almacenamiento externo, el Administrador de tonos de llamada no puede abrirlo a menos que su aplicación tenga permiso para acceder al almacenamiento externo.

complemento permiso que falta para el archivo de manifiesto:

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

Me tomó algún tiempo para resolver esto, mientras no conseguir el título correcto de costum tonos de algún usuario tenía en sus dispositivos

+0

muchas gracias! ¡Pasé horas tratando de resolver este problema, hasta que finalmente encontré tu publicación! – qkx

+0

¡Muchas gracias! ¡No pasé horas intentando resolver este problema, porque encontré tu publicación! –

Cuestiones relacionadas