発信コールを傍受し、ダイアログを使用してコールを中止または続行するオプションをユーザに与えようとしています。発信コールを発信する前にユーザ入力を待つ
最初のステップでは、明らかに、成功したNEW_OUTGOING_CALLを登録するBroadcastReceiverを作成しています。
また、ユーザーに[中止/続行]ボタンを表示するダイアログテーマに基づいてアクティビティを作成しました。私の現在のコードは、発信コールが置かれたときにブロードキャストレシーバーからこれを起動するのに問題はありません。
私が苦労しているのは、ユーザーが応答するまでコールアクションを保持することです。あなたはBroadcastReceiverのonReceiveメソッドからstartActivityを呼び出すことができますが、私の場合はダイアログが表示されている間にコールが通過することを意味します。特に
は、ダイアログを表示したり BroadcastReceiver内からサービスに結合しないことがあります。
Android "Receiver Lifecycle" informationは言って、この上のかなり厳格なテイクを持っています。前者の場合、代わりにNotificationManager APIを使用する必要があります。 後者の場合は、Context.startService()を使用してサービスにコマンドを送信できます。
ブロードキャスト受信者にUI要素を表示するだけでなく、ブロックすることの一般的な悪さを理解しています。私はまた、Androidは一般的に非同期であると理解しています。したがって、これはちょっと奇妙です。しかし、この場合、私はそれが適切だと感じます。通知が私の問題を解決することは間違いありません。だから私は、StackOverflowのスマートな人々が、それができないと言っているにもかかわらず、方法を見つけることを望んでいる。
また、Google Voiceがそうしているようです。
とにかく、私はこれに対する答えのために、StackOverflowとその他のネットを精査しました。大量の関連する質問がありますが、まだ私の問題の性質を完全に把握しているものは見つけていませんが、this oneは死んでいますが、唯一の答えはその点を完全に見逃していました。
私が考えているオプションの1つは、元の通話を中止し、ユーザーが「続行」を選択した場合に新しい通話を発信することです。私は何とかこのケースのためのダイアログを表示しないように私の放送受信機に信号を送らなければならないと思う。これは実行可能でなければなりませんが、過度に複雑に感じます。
ご協力いただきありがとうございます。
一般に、ゲームをしようとしている場合、コードは複雑になります。私は実際に他の解決策を見ていないが、あなたが説明した解決策は見えない。 – inazaruk
もう少し詳しい情報。 APIレベル11(3.0)では、BroadcastReceiver.PendingResultクラスとgoAsync呼び出しの導入により、この問題が解決されたようです。これで、その道は明らかです。残念ながら私は11台前のデバイスでこれをやろうとしています。 – Scot