画面のロックを解除したときにアプリケーションを表示する方法を誰かが理解しているかどうか疑問に思っていました。ユーザーが Bluetooth デバイスをオンにして電話に接続し、ユーザーに UI を表示するアプリケーションがあります。アプリを探したり、通知メニューを使用したりすることは、実行可能なオプションではありません (あまりにも多くの作業が必要であり、明らかな動作ではありません)。
問題は次のとおりです: 画面のロックが解除されている場合: - Bluetooth がデバイスに接続されているときに、バックグラウンド サービスからアクティビティをポップアップできます - UI がすぐそこにあるので、ユーザーは満足しています
画面がロックされている場合: - アプリケーションは起動されますが、破棄されます - ユーザーが電話のロックを解除し、ホーム画面以外は何も表示されません
回避策の 1 つは、アプリケーションが起動したときにキーガードを無効にすることですが、nuclear オプションはかなり悪いオプションです。
PS: 標準的な Android の想定では、これを行うべきではないことはわかっています。通常の場合、この動作は問題ありませんが、この場合、ユーザーが行う作業を追加せずに電話に応答してもらいたいことを明示的に行いました。Google のガイドラインに従って、この動作が気に入らない場合は、これをオフにするか、アプリケーションを使用できないオプションがあります。
もう少し詳しく説明します。これをもう少し詳しく見てみると、問題は、画面がロックされているときにアクティビティを実行できず、ロックを解除して待機しているとは限りません。次のようなことをするとうまくいきます。
- デバイスをロックする
- 電話がロックされている/オフになっているときにEclipseを介してアプリを実行する
- ロックを解除すると、あなたを待っています
ただし、アクティビティが既に実行されていて、新しいウィンドウを表示している場合(これはたまたま透明なウィンドウで、接続されていると言って、何をしたいのか尋ねています)。問題は殺されることだ
E/BackgroundPOPUP( 2436): onCreate で作成された POPUP! I/UsageStats( 78): com.android.launcher2 で既に再開されているにもかかわらず、com.test.POPUP が予期せず再開される E/BackgroundPOPUP( 2436): POPUP onPause E/MyBacgrkoundService( 2436): POPUP アクティブ! I/ActivityManager( 78): 表示されたアクティビティ com.test.POPUP/.PopupTest: 175 ms (合計 175 ms) I/UsageStats( 78): ここで何か問題が発生しました。com.android.launcher2 が一時停止されるとは予想していませんでした E/BackgroundPOPUP( 2436): onStop の呼び出しにより POPUP が終了しました E/BackgroundPOPUP( 2436): onDestroy の呼び出しにより POPUP が終了しました
ここでの設定は次のとおりです。
MyBackgroundService
Bluetooth の状態を処理するサービスです (接続を待機する、ユーザーがアプリを起動した場合に Bluetooth をオンにするなど)。BackgroundPOPUP
ViewFlipper を実行するポップアップ アクティビティをトリガーします。意図MyBackgroundService
から始まります。BackgroundPOPUP
BackgroundPOPUP
Translucent テーマ (正確には Theme.Translucent) を使用したアクティビティであり、ViewFlipper にいくつかの指示が表示され、いくつかのオプションが表示されます。