Domanda

Questa è la mia BroadcastReceiver

    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);
    }
}

Questa è la mia ordinazione Classe 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;
        }
    }
}

e questo è il mio servizio

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");
        }
}

La mia domanda è che ogni volta che riceve dati in broadcast ricevitore creo una nuova istanza del TelephonyManager. Così, quando ho vista la logcat la prima volta che ottengo "Squillo", la seconda volta "suoneria" "suoneria" e così via. Quando devo creare il mio telephonylistener in modo da avere una sola istanza?

Saluti, Nicos

È stato utile?

Soluzione

Si stanno ottenendo chiamata sul ricevitore (Asssuming si sta ascoltando per PhoneState) ogni volta che il cambiamento di stato del telefono.

Si dovrebbe mettere un po 'di controllo nel vostro ricevitore e instatiate l'TelephonyManager solo per la prima volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top