問題タブ [localbroadcastmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
446 参照

android - スクリーンキャストを終了しようとした後の android.com.systemui での ANR

理由はよくわかりませんが、何らかの奇妙な理由で、アプリケーションだけでなく、systemui 全体の ANR も取得しています。再起動する必要があるのは非常に悪いことであり、再起動後、何かが破損したようにすべてのアプリを「最適化」する必要があります (なぜこれが起こるのかについて誰か説明がありますか?)。

私のコードの一部が非常に悪いため、これを引き起こしていると思いますが、悪意のあるコードでもシステム UI をオーバーロードできるのでしょうか? ともかく...

私がやっていることは、画面記録を処理するサービスを起動しようとしていることです。アクティビティ (フラグメントから) は許可を求め (これは取得され、画面の右上隅に Screencast アイコンが表示されます)、状態の変更を処理するサービスをバインドします。状態の変化とは、これです...

州:

  • Dead - 初期化と準備が必要であることを意味します
  • Alive - 開始する必要があり、完全に初期化/準備されていることを意味します
  • 開始済み - 現在記録中であることを意味します。
  • 一時停止 - 再起動後に新しい動画を開始することを意味し、すべての一時的な動画を 1 つに結合します (詳細はまだわかっていません)。
  • 停止 - すべてのファイルを 1 つに結合し、ブロードキャストのインテントを介して URI を送信することを意味します (まだここまで到達していません)。

Dead -> Alive -> Started <-> Paused -> Stopped -> Dead の順に進みます。少なくともそれが全体的な計画です。サービスを制御するためのリモートとして機能するフローティング ボタンを用意する予定です。そのため、受信機 (ローカル) で、フラグメントが終了するのを待っているフラグメントにブロードキャストします。

さて、私が持っているつもりのものは十分です。私が今持っているものに入りましょう。それは一種の混乱です。私はこれまでにこのようなことをしたことがないので、なぜここで尋ねているのですか. 私は多くのことを試しましたが、残念なことに、新しいソリューションをテストする唯一の方法は、再起動して Android がすべてを最適化するまで 15 分間待つことです。これで、これが「長い」コード セグメントであることがわかりましたが、クラッシュする場所の 1 つは、216 行目の stopRecording() であると言えます。

コードはこちら

変更が必要な場合はお知らせください。

最後に: これを別のスレッドで実行する必要がありますか? それが問題でしょうか?systemui ではなくアプリだけがクラッシュしないのはなぜですか?

0 投票する
0 に答える
574 参照

android - ワーカー スレッドからメイン スレッドにブロードキャストを送信できません

Android Developer Summit 2015 で発表されたものと同様のアーキテクチャを実装しようとしています: https://github.com/yigit/dev-summit-architecture-demo。私のアプリケーションには、ネットワーク リクエストを処理する単純なクラスがあります。このクラスは、リクエストに Retrofit 2 を使用します。また、依存性注入に Dagger 2 を使用しています。

私は非常に単純なことを達成しようとしています。私のアクティビティはコントローラーにデータをフェッチするように指示します。次にコントローラーは、REST クライアントを呼び出して、ネットワーク リクエストを実行します。リクエストが正常に完了したら、アクティビティにイベントをブロードキャストして、UI を更新できるようにします。ただし、イベントは放送されていません。

LocalBroadcastManager を使用してイベントをブロードキャストしています。私のアクティビティは、onResume/onPause メソッドでブロードキャストを登録/登録解除します。私の REST クライアントには、依存性注入によって提供されるアプリケーション コンテキストのインスタンスがあります。REST クライアントは、アプリケーション コンテキストを使用してブロードキャストを送信します。

私の最初の疑いは、アクティビティがメイン スレッドでのブロードキャストを期待しているのに対し、ネットワーク リクエストはワーカー スレッドで実行されるため、ブロードキャストが送信されていないということでした。ただし、Android のドキュメントが正しい場合、このようなシナリオは問題になりません。

これが私の活動です。

これが私の REST クライアントです。

どんな助けでも大歓迎です。

0 投票する
1 に答える
348 参照

broadcastreceiver - LocalBroadcastManager は、同じアプリ内のグローバル BroadcastReceivers に Intent を送信できますか?

LocalBroadcastManager は、同じアプリ内に存在する場合、グローバルに登録された BroadcastReceiver にインテントを送信できますか? または、そのために context.sendBroadcast() を使用する必要がありますか?

0 投票する
0 に答える
374 参照

java - Android LocalBroadcast マネージャーの onReceive が機能しない

Android サービス クラスで localbroadcastreceivers を使用しようとしました。しかし、それが実行されるたびに、メイン アクティビティの onReceive メソッドが呼び出されません。いくつかの例とチュートリアルを見てきましたが、問題が見つかりませんでした。

主な活動

onCreate メソッド

テスト サービス クラス

0 投票する
1 に答える
76 参照

android - BroadcastReceiver - 背景を変更するボタンを取得できません

アクティビティとサービスがあります。

私のアクティビティでは、ボタンがサービスとやり取りして、GPS ログの開始/停止を行います。

My Service には 3 つの状態インジケーターがあります。1 つは Google Play Services に接続されているため、1 つはアクティブに GPS をログに記録するため、もう 1 つはログに記録された内容を処理するためです。

Google Play サービスに接続した場合のサービス フローは次のとおりです。

準備完了 -> ロギング -> 処理中 -> 準備完了

サービスは、これらの状態を次のようにブロードキャストします。

My Activity は次のように状態を受け取ります。

それから私の問題が来ますHandleTripStatus()以下に投稿された では、ボタンのテキストと背景を変更して、サービスが現在行っていることを反映します。これは、1 番目と 3 番目のケースでうまく機能します。ただし、正しいブール値を受け取ったにもかかわらず、2 番目の背景が描画されることはありません。

問題をデバッグするために、次のことを確認しました。

  • テキストと背景リソースが正しく定義されている (つまり、最初と 3 番目のケースの代わりにそれを使用しようとしている)
  • if-else 条件は期待どおりに実行されます (つまり、"else if" 条件は、期待どおりに実際に実行されます。ブレークポイントによって検証されます)。
  • このプロセスでは、他の if-else 条件は使用されません。(つまり、正しい条件のみが実行されます。)

関連する可能性がある他のコード:

これは、アクティビティが GPS ログの停止を要求する方法です (終了前の処理ステップにつながります)。

これは、アクティビティからメッセージを受信した後にサービスで何が起こるかの構造です。

私はすべてのアイデアがありません。原因は何ですか?else-if でボタンの背景が変わらないのはなぜですか?

0 投票する
2 に答える
1267 参照

android - IntentService から UI を更新できません

一見単純な要件 - から UI を更新することIntentService。下のショットでは、Start Serviceボタンがクリックされたときに、 のProgressBar上に のみを表示しTextView、しばらくしてから を削除する必要がありますProgressBar

AVD スクリーンショット

SOで多くの回答が見つかりましたが、どういうわけかまだ解読できません。このことから、それLocalBroadcastManagerが良い方法であることがわかります。私もこれに従ってみましHandlerた( sを使用したアプローチ)が、ProgressBarあまりにも表示されません。最後に、この回答に基づいて、これが私が最終的に得たものです。これまでに管理した出力はToast、すべてのロギングが完了した後に s が連続して表示されるだけです。

私がどこで間違っているのか、かなり長い間苦労しているところを指摘していただければ幸いです。よろしくお願いします!

MainActivity更新しました

IntentService更新しました

activity_main.xml

AndroidManifest