Android Broadcastreceiver正在创建TelephonyManager的多个实例

Android Broadcastreceiver正在创建TelephonyManager的多个实例,android,broadcastreceiver,telephonymanager,Android,Broadcastreceiver,Telephonymanager,这是我的收音机 public class PlayAudio extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); tm.l

这是我的收音机

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
实例。因此,当我第一次看到logcat时,我听到“铃声”,第二次听到“铃声”“铃声”等等。我应该在什么时候创建我的
telephonylistener
,以便只有一个实例

问候,,
Nicos

每次电话状态改变时,您都会收到对方的来电(假设您正在收听PhoneState)


您应该检查一下您的接收器,并仅第一次安装
TelephonyManager

既然我是一个noob,你能给我一个简单的演示如何做到这一点吗?取任意布尔值,检查它是否为false,然后实例化并将布尔值设置为true,否则跳过。。当任务完成时,将其设为false。。保存此布尔值为SharedReference。。。