Android-NEW_OUTGOING_CALLイベントのループを停止しますか?
質問
ACTION_NEW_OUTGOING_CALL
イベントをキャッチする BroadcastReceiver
があります。
onReceive()
メソッドでは、指定された番号を新しい ListActivity
に送信します。ユーザーはリストからさまざまな新しい宛先番号を選択できます。
ユーザーがリストから新しい番号を選択すると、URIフィールドの新しい番号で新しい ACTION_CALL
インテントを開始します。または、結果は元の番号になる可能性があります。
新しい番号が何であれ、すぐにダイヤルし、それ以上処理しないでください。
BroadcastReceiver
に、この結果の番号を再度処理してはならないことを知らせるにはどうすればよいですか?
解決
「バイパスプレフィックス」を実装することでこれを解決しました。 BroadcastReceiver
で。クライアントアプリが番号を直接呼び出す場合は、 ACTION_CALL
インテントを呼び出す前にプレフィックスを付加するだけです。
ダイヤルされた番号に(ハードコードされた)プレフィックスがある場合、 BroadcastReceiver
はプレフィックスを削除し、通常どおり通話を続行できるようにします。
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
String number = getResultData();
if (number.startsWith(BYPASS_PREFIX)) {
setResultData(number.substring(BYPASS_PREFIX.length()));
} else {
// do additional processing
}
}
}
これにより、2つの問題が一度に解決します。これにより、コールループが停止するだけでなく、電話帳エントリにプレフィックスを保存することで特定の番号の追加処理をバイパスする方法も提供されます。
他のヒント
ブロードキャストレシーバーのonReceive()メソッドは、引数としてインテントを受け取ります。 Intent.getExtras()を使用して、Intentからバンドルを抽出します。 このバンドルには、次の3つのキーと値のペアが含まれています。
- android.phone.extra.ALREADY_CALLED = null
- android.intent.extra.PHONE_NUMBER = 98xxxxxx98
- android.phone.extra.ORIGINAL_URI = tel: 98xxxxxx98
98xxxxxx98 は、ユーザーがダイヤルした番号です。
onReceive()が再度呼び出されると、この番号は 98xxxxxx98 * または 0 * に変わります ダイヤル番号の末尾にあるアスタリスク(*)を確認することで、onReceive()メソッドが初めて呼び出されるか、次の後続の時刻に呼び出されるかを推測できます。