广播接收器创建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

+0

因为我是一个noob可以请你提供一个简单的演示如何做到这一点? – Nicos

+1

采取任何布尔值,并检查它是否为false然后实例化并设置布尔值true否则跳过..并在任务完成时将其设置为false ..保存此布尔值为SharedPreference ... –

+0

谢谢!它完美地工作 – Nicos