원래 서비스로 통화상태를 캐치하려 했는데 .. 브로드케스트 리시버로도 가능하다고 하더군요 ..
그래서 브로드케스트에서 phoneStateListener로 통화상태를 감지해서 하려고 하는데...도저히 모르겠습니다.
브로드케스트 리시버부분
public class ServiceReceiver extends BroadcastReceiver{
TelephonyManager phoneStateManager;
PhoneStateRead phoneListener;
String TAG = "Call State catch";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "ServiceReceiver->onReceive();");
phoneListener = new PhoneStateRead();
phoneStateManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
phoneStateManager.listen(phoneListener, PhoneStateListener.LISTEN_SERVICE_STATE);
phoneStateManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
Intent callOut = new Intent(context, Call_Out_Record_Activity.class);
PendingIntent pCallout = PendingIntent.getActivity(context, 0, callOut, PendingIntent.FLAG_CANCEL_CURRENT);
try {
pCallout.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
}
phoneStateListener 부분
public class PhoneStateRead extends PhoneStateListener{
private final String TAG = "Phone State Read";
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_IDLE "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_OFFHOOK "+incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> CALL_STATE_RINGING "+incomingNumber);
break;
default:
Log.i(TAG,"MyPhoneStateListener->onCallStateChanged() -> default -> "+Integer.toString(state));
break;
}
}
@Override
public void onServiceStateChanged(ServiceState serviceState) {
switch (serviceState.getState()) {
case ServiceState.STATE_IN_SERVICE:
Log.i(TAG,"MyPhoneStateListener->onServiceStateChanged() -> STATE_IN_SERVICE");
serviceState.setState(ServiceState.STATE_IN_SERVICE);
break;
case ServiceState.STATE_OUT_OF_SERVICE:
Log.i(TAG,"MyPhoneStateListener->onServiceStateChanged() -> STATE_OUT_OF_SERVICE");
serviceState.setState(ServiceState.STATE_OUT_OF_SERVICE);
break;
case ServiceState.STATE_EMERGENCY_ONLY:
Log.i(TAG,"MyPhoneStateListener->onServiceStateChanged() -> STATE_EMERGENCY_ONLY");
serviceState.setState(ServiceState.STATE_EMERGENCY_ONLY);
break;
case ServiceState.STATE_POWER_OFF:
Log.i(TAG,"MyPhoneStateListener->onServiceStateChanged() -> STATE_POWER_OFF");
serviceState.setState(ServiceState.STATE_POWER_OFF);
break;
default:
Log.i(TAG,"MyPhoneStateListener->onServiceStateChanged() -> default -> "+Integer.toString(serviceState.getState()));
break;
}
}
}
이렇게 인터넷에 굴러다니는 소스를 붙여넣기 해서 했는데...
avd로 실행해보니 통화 수신시 바로 띄어지고 통화 초록색버튼 클릭시 다시 띄어지더군요,,,,,
그리고 또 띄우려고 하는 엑티비티는 Call_Out_Record_Activity 이것 뿐인데 이거말고 메인 엑티비티도 같이 띄워지네요......도데체 머가 문제인걸까요???????
이거랑 전화 송신시 상대방이 전화를 안받거나 했을시에도 같은 엑티비티를 띄워야 합니다. ㅜㅜ