Broadcastreceiver creando múltiples instancias de TelephonyManager
-
26-10-2019 - |
Pregunta
Este es mi locutor
public class PlayAudio extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);
}
}
Esta es mi clase personalizada de PhonestateListener
public class CustomPhoneStateListener extends PhoneStateListener {
Context context;
public CustomPhoneStateListener(Context context) {
super();
this.context = context;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.d("PHONEA", "IDLE");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("PHONEA", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d("PHONEA", "RINGING");
Intent intent = new Intent(this.context, AudioService.class);
context.startService(intent);
break;
default:
break;
}
}
}
Y este es mi servicio
public class AudioService extends Service{
private static final String TAG = "PHONEA";
MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Log.d(TAG, "onCreate -> TODO");
}
}
Mi pregunta es que cada vez que recibo datos en el receptor de transmisión, creo una nueva instancia del TelephonyManager. Entonces, cuando veo el logcat la primera vez que recibo "sonar", la segunda vez "sonando" "sonando", etc. ¿Cuándo debo crear mi TelephonyListener para tener solo una instancia?
Saludos, Nicos
Solución
Está recibiendo una llamada en su receptor (calmado que está escuchando Phonestate) cada vez que cambia el estado del teléfono.
Debe poner un cheque en su receptor e instalar el TelephonyManager
Solo por primera vez.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow