전화 오는 때에 service 의 동작을 멈추는 방법
기본적으로 Service 음악을 play 하거나 했을 때 전화가 와도 멈추지 않는다. 그냥 동시에 소리가 난다. 이러면 전화통화를 할 수 없으니, 전화가 올 때 Service 를 pause 하거나 stop 을 해야만 한다. 이럴 때- PhoneStateListener
- BroadcastReceiver
등의 방법을 사용할 수 있다.
PhoneStateListener
Detecting incoming and outgoing phone calls on Android.PhoneStateListener 를 extends 해서 listener 를 만들고, TelephonyManager 에 listener를 설정 해 주면 된다.
private class CallStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_RINGING: // called when someone is ringing to this phone Toast.makeText(ctx, "Incoming: "+incomingNumber, Toast.LENGTH_LONG).show(); break; } } }
tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);
listener 를 등록(register)하고,
나중에 필요없게 되면, unregister 한다.
tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE);
BroadcastReceiver
http://stackoverflow.com/questions/14888995/android-closing-media-service-on-incoming-callprivate void unregisterCallReceiver(){ if(mIsReceiverRegistered){ unregisterReceiver(mCallReceiver); mIsReceiverRegistered = false; } } private void registerCallReceiver(){ if(!mIsReceiverRegistered){ IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.PHONE_STATE"); registerReceiver(mCallReceiver, filter); mIsReceiverRegistered = true; } } BroadcastReceiver mCallReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); String number = ""; Bundle bundle = intent.getExtras(); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { // Phone is ringing number = bundle.getString("incoming_number"); pause(); Log.d("CallStateReceiver", "pause is executed"); } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { // Call received } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { // Call Dropped or rejected } } }; // end of BroadcastReceiver
See Also
- Broadcast Receiver에 대해서| 안드로이드 기본 강좌, 2011.09.15.
댓글 없음:
댓글 쓰기