PhoneStateListener#onCallStateChangedを試した結果
エミュレータ上
発信動作:IDLE(発信)→OFFHOOK(相手がでる)→IDLE(終了)
受信動作:RINGING(受信待機)→OFFHOOK(でる)→IDLE(終了)
エミュレータ上では発信後、すぐに相手がでる画面みたいなので確認ができない(本当に相手がでたときにOFFHOOKになっているか)
なので実機で確認してみると
実機上
発信動作:IDLE(発信)→OFFHOOK(発信?)→?(通話中)→IDLE(終了)
受信動作:RINGING(受信待機)→OFFHOOK(でる)→IDLE(終了)
通常、OFFHOOK(通話中など)で相手がでると検知するところ、発信の時に、IDLE→OFFHOOKとなってしましました
受信動作では、OFFHOOK(通話中など)は電話にでると検知し問題ありません(受け側の電話にでるものは)
今回行いたい動作として、「通常の標準電話発信(アプリからの発信ではない)で相手がでたら、XXXする」ということがしたかったのですが
「電話に相手がでた」ということが検知できません。
PhoneStateListener#onCallStateChangedの試し方がおかしいのでしょうか?
以下一部コードですが、各ステータス時にトーストで調べてみました
@Override
public IBinder onBind(Intent intent){
return null;
}
//開始時
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
mTelephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
Toast.makeText(this, resultData, Toast.LENGTH_SHORT).show();
}
PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String number) {
phoneCallEvent(state, number);
}
};
private void phoneCallEvent(int state, String number){
switch(state) {
/* 各状態でTextViewを追加する */
case TelephonyManager.CALL_STATE_RINGING:
/* 着信 */
resultData="RINGING";
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
/* 通話 */
resultData="OFFHOOK";
break;
case TelephonyManager.CALL_STATE_IDLE:
/* 待ち受け */
resultData="IDLE";
break;
};
}