発信が応答されたことを検出するために、この質問から、、、、およびを作成してリッスンしようとしましたが、以下で説明するPhoneStateListener
ように、機能していないようです。TelephonyManager
CALL_STATE_RINGING
CALL_STATE_OFFHOOK
CALL_STATE_IDLE
まず、マニフェストに次の許可を登録しました。
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
次に、発信呼び出しが行われるたびにイベントBroadcastReceiver
をOutCallLogger
キャッチする呼び出し先:NEW_OUTGOING_CALL
<receiver android:name=".listener.OutCallLogger">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
次に、私の実装OutCallLogger
。呼び出されたときはいつでもnewをnoCallListenerYet
アタッチしないように、と呼ばれるブール値を設定しました。PhoneStateListener
TelephonyManager
onReceive()
public class OutCallLogger extends BroadcastReceiver {
private static boolean noCallListenerYet = true;
@Override
public void onReceive(final Context context, Intent intent) {
number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (noCallListenerYet) {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
tm.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.d(This.LOG_TAG, "RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(This.LOG_TAG, "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(This.LOG_TAG, "IDLE");
break;
default:
Log.d(This.LOG_TAG, "Default: " + state);
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
noCallListenerYet = false;
}
}
}
これで、デバイスで発信を行うと、CALL_STATE_RINGING
呼び出されることはありません。私はいつも、他の回線が鳴り始めたときに「IDLE」から「OFFHOOK」までのプリントアウトを取得し、通話に応答したときに何も表示せず、通話が終了したときに再び「IDLE」のプリントアウトを取得します。
Androidで発信コールが応答されたことを確実に検出するにはどうすればよいですか、それとも可能ですか?