0

画面のロックを解除したときにアプリケーションを表示する方法を誰かが理解しているかどうか疑問に思っていました。ユーザーが 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 が終了しました

ここでの設定は次のとおりです。

  • MyBackgroundServiceBluetooth の状態を処理するサービスです (接続を待機する、ユーザーがアプリを起動した場合に Bluetooth をオンにするなど)。BackgroundPOPUPViewFlipper を実行するポップアップ アクティビティをトリガーします。意図MyBackgroundServiceから始まります。BackgroundPOPUP
  • BackgroundPOPUPTranslucent テーマ (正確には Theme.Translucent) を使用したアクティビティであり、ViewFlipper にいくつかの指示が表示され、いくつかのオプションが表示されます。
4

1 に答える 1

0

KeyGuardManagerメソッドpublic void exitKeyguardSecurely (KeyguardManager.OnKeyguardExitResult コールバック)を使用できます。

キーガードを安全に終了します。この API の使用例は、キーガードを無効にした後、キーガードを無効にして、ユーザーがキーガードを通過することなく安全と見なされる限られた量の情報を表示する権限が付与されたアプリが、そうでない場所に移動する必要がある場合です。キーガードをすり抜けることなく安全に閲覧できます。これにより、キーガードが安全な場合、キーガードのロック解除画面が表示されます。パラメーター callback 操作が成功したかどうか、ユーザーがキーガードを通過した後、通常は安全と見なされるものを安全に起動できるかどうかを確認します。

これがあなたのやりたいことに合っているかどうかは100%確信が持てません。

別のオプションは、アプリが public boolean inKeyguardRestrictedInputMode () を使用してウェイクアップしているときにキーガードがオンになっているかどうかを確認し、キーガードがロック解除されるまでアプリがウェイクアップしないようにすることです。

于 2010-03-31T15:29:26.107 に答える