广播接收器创建TelephonyManager
问题描述:
的多个实例,这是我的BroadcastReceiver广播接收器创建TelephonyManager
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");
}
}
我的问题是,每当我在广播接收器中接收数据时,我创建了一个Teleph的新实例onyManager。所以当我第一次看到logcat时,第一次看到“RINGING”,第二次看到“RINGING”,“RINGING”等等。我应该创建我的telephonylistener以便只有一个实例吗?
问候, 尼科斯
答
你对你的接收机收到的呼叫(Asssuming你正在听的PhoneState)每次手机状态变化。
你应该在你的接收器上放一些支票,并且第一次安装TelephonyManager
。
因为我是一个noob可以请你提供一个简单的演示如何做到这一点? – Nicos
采取任何布尔值,并检查它是否为false然后实例化并设置布尔值true否则跳过..并在任务完成时将其设置为false ..保存此布尔值为SharedPreference ... –
谢谢!它完美地工作 – Nicos