这是我的广播员

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

这是我的自定义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;
        }
    }
}

这是我的服务

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

我的问题是,每次我在广播接收器中收到数据时,我都会创建一个TelephonyManager的新实例。因此,当我第一次获得“响起”时,我第二次“响起”“响起”等等时。我什么时候应该创建我的TelephonyListener才能只有一个实例?

问候,尼科斯

有帮助吗?

解决方案

每次电话状态更改时,您都会收到接收器的电话(您正在收听Phonestate的屁股)。

您应该在接收器中放一些检查,然后进行启动 TelephonyManager 仅第一次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top