誰かが私にいくつかの優れたリソースや正しい方向性を教えてくれたり、ここで私を助けるためにいくつかのコードスニペット/疑似コードをもっとうまく送り出すことができれば幸いです.
私はAndroid develが初めてで、sipライブラリを使用してsip呼び出しを行う/受信するアプリを作成する任務を負っています。ライブラリはかなり抽象化されており、.rejectCall()、.answerCall() などを呼び出すことができる「電話」インスタンスですべて動作します。電話のインスタンスを取得するには、次の行を使用します。
AbtoPhone abtoPhone = ((AbtoApplication)getApplication()).getAbtoPhone();
それはすべてうまくいきますが、アクティビティとサービスを正しく理解していないため、アプリに変換する方法がわかりません。
ユーザーがログインし、sip サーバーに登録してから、電話が通話をリッスンできるようにする機能が必要です。
バックグラウンドに入ったときに、引き続き通話をリッスンしたい。そして、バックグラウンドで、誰かが通話に応答または拒否できるようにするダイアログをポップアップしたい場合、応答時に最初のアクティビティを起動させたい (または、終了した場合は起動させたい) とユーザーが楽しくチャットできるようにフォアグラウンド。
どうすれば一番いいのでしょうか?現時点では、メイン アクティビティで AbtoPhone を取得し、アカウントを追加し、すべてのリスナーを追加しています。ユーザーが登録ボタンを押すと、同じコマンドで電話の独自のインスタンスを取得するスティッキー サービスが開始されます。従来通り。
次に、サービス内で、ユーザーを sip クライアントに登録します。メインアクティビティを閉じると、これは引き続き実行され、呼び出しを受け取りますが、例外でクラッシュします:
android.view.WindowManager$BadTokenException: Unable to add window
-- token android.os.BinderProxy@4154ebb0 is not valid;
is your activity running?
私の問題は、サービスを呼び出した元のアクティビティが死んでいて、それを起こそうとしていることです。しかし、私はそれを適切に行う方法がわかりません。
サービスとアクティビティは繰り返しの質問であることがわかりました。チュートリアルを読んでみましたが、それらを自分のケースに適切に適用する方法がわかりません。誰かがXを実行し、サービスを開始し、これを渡し、いつあなたはYとVOILAを行う電話を受けます!しかし、これまでにどんな助けも大いに感謝します!!!
乾杯、
DJヌードル
>>>>編集
わかりました、AbtoPhone のすべての処理をサービスに移動しました。呼び出しを取得したら、MainActivity を呼び出してサービスにバインドし、正しいメソッドを呼び出して呼び出しに応答できるようにします。
これは問題なく機能しますが、これは、常に実行されている永続的なサービスを持っていることを意味し、それは悪い、悪いことだと感じています。電話のリソースを使い果たすことなく、AbtoPhone のインスタンスが着信をリッスンし続けるにはどうすればよいですか?
乾杯!