Android setStreamVolume para STREAM_RING no siempre funciona mientras LLAMA

Estoy tratando de hacer esta aplicación simple que permite que el teléfono suene pero no reproduzca un sonido cuando reciba notificaciones en Android 4 (ICS). Para hacer eso, configuré el flujo de timbre/notificación en 0 (silencio). Cuando recibo una llamada, configuro el volumen del timbre al máximo (pe 7) y luego, en Inactivo, lo vuelvo a poner a 0 (silencio).

Para hacer eso, uso este código simple.

public class ReceiverClass extends BroadcastReceiver
{   
   @Override public void onReceive(Context context, Intent intent)
   {      
      if ("android.intent.action.PHONE_STATE".equals(intent.getAction()))
      {  String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);      
         AudioManager amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

         if (TelephonyManager.EXTRA_STATE_IDLE.equals(state))
         {  amanager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);           
         }
         else if (TelephonyManager.EXTRA_STATE_RINGING.equals(state))
         {  amanager.setStreamVolume(AudioManager.STREAM_RING, 7, 0);           
         }        
      }
   }  
}

El problema es que a veces funciona y a veces no. No puedo encontrar una razón. Me llamo diez veces y el timbre suena tal vez 6. Los otros 4 estaban silenciados. ¿¿extraño??

Entiendo que mi aplicación podría tardar "demasiado" en llamar a setStreamVolume a 7, así que tal vez esa sea la forma en que a veces llega a tiempo (y suena) y a veces es demasiado tarde (por lo que no suena) porque la llamada ya comenzó con 0 volumen. Entonces, ¿hay alguna manera de reiniciar el sonido del timbre? ¿Alguien podría ayudarme con esto? Gracias.

preguntado el 30 de junio de 12 a las 13:06

1 Respuestas

Debo decir que debería intentar darle a su receptor de transmisión una alta prioridad. que se puede hacer como a continuación

  <intent-filter android:priority="1000">
   <action android:name="android.intent.action.PHONE_STATE" />
 </intent-filter>     

consulte el enlace >> Más alta prioridad

Puede / puede resolver su problema.

Respondido el 30 de junio de 12 a las 19:06

También traté de reproducir el tono de llamada predeterminado (usando MediaPlayer). Esto funciona bastante bien cuando Android falla y no reproduce el timbre. Pero si no falla, ambos tonos de llamada se escuchan al mismo tiempo con un poco de superposición, por lo que el resultado es terrible. Ojalá supiera cómo detener el timbre de Android (en caso de que esté encendido) y comenzar el mío solo. - tonelada

La siguiente clase está causando sus problemas: Campanero Regresa si el volumen del timbre está configurado en 0, si ingresa antes de que configure el volumen en algo que no sea 0, fatalidad. - Matware

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.