마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

브로드케스트 리시버로 통화가 종료 된 후 혹은 전화를 안받을 시 엑티비티를 띄우고 싶습니다.

0 추천

원래 서비스로 통화상태를 캐치하려 했는데 .. 브로드케스트 리시버로도 가능하다고 하더군요 ..

그래서 브로드케스트에서 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 이것 뿐인데 이거말고 메인 엑티비티도 같이 띄워지네요......도데체 머가 문제인걸까요??????? 
 
이거랑 전화 송신시 상대방이 전화를 안받거나 했을시에도 같은 엑티비티를 띄워야 합니다. ㅜㅜ
jj4st13 (120 포인트) 님이 2014년 11월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...