2011-06-19 9 views
1

発信コールを傍受し、ダイアログを使用してコールを中止または続行するオプションをユーザに与えようとしています。発信コールを発信する前にユーザ入力を待つ

最初のステップでは、明らかに、成功した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つは、元の通話を中止し、ユーザーが「続行」を選択した場合に新しい通話を発信することです。私は何とかこのケースのためのダイアログを表示しないように私の放送受信機に信号を送らなければならないと思う。これは実行可能でなければなりませんが、過度に複雑に感じます。

ご協力いただきありがとうございます。

+0

一般に、ゲームをしようとしている場合、コードは複雑になります。私は実際に他の解決策を見ていないが、あなたが説明した解決策は見えない。 – inazaruk

+0

もう少し詳しい情報。 APIレベル11(3.0)では、BroadcastReceiver.PendingResultクラスとgoAsync呼び出しの導入により、この問題が解決されたようです。これで、その道は明らかです。残念ながら私は11台前のデバイスでこれをやろうとしています。 – Scot

答えて

0

ユーザが必要とする場合は、呼び出しインテントフィルタを使用してアクティビティを呼び出すことができます。ユーザが入力を行うまで、入力ダイアログが作成されます。もし私が間違っているなら私を訂正してください。

+0

あなたの反応を完全に理解しているかどうかはわかりません。私はすでにNEW_OUTGOING_CALLインテントを使用して、ユーザーがコールを発信するコードを呼び出しています。それは問題ではない。この問題は、ユーザーが電話をかけた後、onReceiveメソッドの内部で発信呼び出しをどうするかを決める必要があります。これは、ユーザー入力を待つのではなく、ダイアログを起動する時間を与えます。 – Scot

+0

うーん、これは問題の理由かもしれないと思う..ブロードキャストレシーバは、特定のイベントの登録済み通知者として機能します。これで、あなたとデフォルトの電話アプリケーションがNew_OUTGOING_CALLアクションを受信するために登録されました。だからあなたのアプリケーションは特定のイベントを取得するために呼び出されますが、アプリケーションがポップアップアプリケーションのために停止した場合、他のアプリケーション(デフォルトの電話アプリケーション)が電話アプリケーションを呼び出すと、通知を受け取ります。 。今すぐsdkは登録されているすべてのアプリケーションに通知します。 –

+0

並べ替えこれは「順序付けられた」放送ですが、登録された受信者が一度に1つずつ処理することを意味します。 「デフォルトの電話」アプリケーションは、処理が完了した後に処理するだけです。私はonReceiveに永遠に座り、コールは決して外に出ないだろう。私はちょうど起こる必要があるユーザーの入力を待っている間にonReceiveに座る方法を理解できません。再度、BroadcastReceiver.goAsyncを見て、この正確な問題をAPIレベル11で解決する新しい方法を探してください。 – Scot

関連する問題