【问题标题】:Broadcastreceiver creating multiple instances of TelephonyManagerBroadcastreceiver 创建多个 TelephonyManager 实例
【发布时间】:2011-09-05 11:13:49
【问题描述】:

这是我的广播接收器

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时我得到“RINGING”,第二次“RINGING”“RINGING”等等。我应该什么时候创建我的telephonylistener 以便只有一个实例?

问候, 尼科斯

【问题讨论】:

    标签: android broadcastreceiver telephonymanager


    【解决方案1】:

    每次电话状态发生变化时,您都会在接收器上接到电话(假设您正在监听 PhoneState)。

    您应该在您的接收器中进行一些检查,并仅在第一次设置TelephonyManager

    【讨论】:

    • 因为我是个菜鸟,你能不能给我一个简单的演示,告诉我怎么做?
    • 取任何布尔值并检查它是否为假然后实例化并将布尔值设置为真否则跳过..并在您的任务完成时将其设为假..保存此布尔值是 SharedPreference...
    猜你喜欢
    • 1970-01-01
    • 2017-03-30
    • 2018-07-11
    • 2017-11-15
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多