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

listen으로 call state를 받는데... 안 옵니다 ㅠㅠ

0 추천
안녕하세요, 안드로이드 초보 개발자입니다.

receiver를 하나 등록해주고 PHONE_STATE action을 수신하게 해놓았습니다.

TelephonyManager 변수를 static으로 receiver에 선언해 놓았습니다.

PHONE_STATE를 수신하면 TelephonyManager 변수의 null 상태를 체크하여 null 인경우 listen을 하게 해놓았습니다.
(LISTEN_CALL_STATE)

 

근데 일부 단말에서 call state가 오지 않네요 ㅠㅠ

이게... 단말문제인지 코드를 잘못짠게 문제인지 확실하지가 않습니다.

 

코드에 문제가 없는지 확인 부탁드립니다!!

1. Manifest.xml에 권한 및 receiver 등록.

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<receiver android:name=".CallReceiver" android:exported="true" >
     <intent-filter>
          <action android:name="android.intent.action.PHONE_STATE" />
     </intent-filter>
</receiver>

 

2.  Receiver 코드.

private static TelephonyManager tm = null;

@Override
public void onReceive(Context context, Intent intent) {
     if(intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)){
          if(tm == null){
               tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
               tm.listen(psm, PhoneStateListener.LISTEN_CALL_STATE);
          }else{
               Log.i(TAG, "tm is not null");
          }
     }
}

private PhoneStateListener psm = new PhoneStateListener(){

     @Override
     public void onCallStateChanged(int state, String incomingNumber) {
          Log.i(TAG, "onCallStateChanged, state:"+state+", number:"+incomingNumber);
          super.onCallStateChanged(state, incomingNumber);
     }

};
블랙이요블랙 (12,860 포인트) 님이 2016년 7월 6일 질문

1개의 답변

0 추천
저도예전에 비슷한문제로

@Override
	public void onReceive(Context context, Intent intent) {
		
        
        mcontext = context; //context 객체 넘겨줌
		String action = intent.getAction();
		Bundle bundle = intent.getExtras();

		if(action.equals("android.intent.action.PHONE_STATE")){

			String state = bundle.getString(TelephonyManager.EXTRA_STATE);

			if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
				
					 							
							
			}else if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
	

			}else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){	
			Log.d(TAG, " EXTRA_STATE_OFFHOOK " + bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER));
			pnum = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

			}
		}else if(action.equals(Intent.ACTION_NEW_OUTGOING_CALL)){
			Log.d(TAG, " OUTGOING CALL : " + bundle.getString(Intent.EXTRA_PHONE_NUMBER));
			pnum = bundle.getString(Intent.EXTRA_PHONE_NUMBER);	

		}	

}

이런식으로 코드변경하고하니깐 번호 잘가져오드라고여..

 

sadeva (21,550 포인트) 님이 2016년 7월 7일 답변
...