0

デバイスの画面がオフになったときにのみ動作するアプリケーションがあります。ブロードキャスト レシーバー ( ) をセットアップしましたがIntent.ACTION_SCREEN_OFF、正常に動作します。デバイスの画面が消えると常にLOGCATに記録されます。ここまでは順調ですね。

onReceiveACTION_SCREEN_OFF からの私のコードは、いくつかのコード計算を使用しており、すべて正常に実行されます (画面がオフになったとき)。ここまでは順調ですね。

コードの最後でonReceive新しいアクティビティを開始していますが、onCreateターゲティング アクティビティが常に実行されているとは限りません。(たとえば、私の HTC Desire 2.3.7 では問題なく動作します。HTC Wildfire S 2.3.5、Xperia Arc S 2.3.4 では実行されず、Samsung Galaxy ACE 2.2.1 では実行されることがあります。 t)。私のLOGCATはonReceive、最後まで実行されたことを示していますが、アクティビティは開始されていません。このアクティビティを開始するには、次のコードを使用しています。

Intent startH_Activity = new Intent(getApplicationContext(), HandleActivity.class);
        startH_Activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startH_Activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(startH_Activity);

注意すべき重要事項:

  • 上記の一部の電話では機能しないと言いました。当然のように、すぐには機能しません(SCREEN_OFFが発生したとき)。常にアクティビティが次のように開始されます..画面が消えてから 10 ~ 15 分後 (これは受け入れられません)

  • 画面が消えてアクティビティが開始されない場合、デバイスの電源ボタンを押すと、ターゲットのアクティビティがすぐに開始され、アプリは通常どおりに動作します。(繰り返しますが、これは受け入れられません。自動的に起動する必要があります)。

  • どんなデバイスでも PC に接続すると、正常に動作します。画面が消えた直後にアクティビティが開始されます。

多くの Stack Overflow を読んだ後、これは MAYBE デバイスがスリープ状態になるためであることに気付きました。そのため、電源ボタンを押すと通常どおりに動作するか、同期などのために10〜15分後に自動的にウェイクアップします。そこで、WAKELOCK を使用しました。

//OnCreate Service
powMan = (PowerManager) getSystemService(POWER_SERVICE);
wake = powMan.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");

//OnReceive (screen goes off)
wake.acquire();

しかし、まだ成功していません。(私は間違っていますか?) wake lock が取得されても、これらのデバイスにはアクティビティが表示されません。

基本的に私が求めているもの。画面がオフになったときに通常のアクティビティを開くにはどうすればよいですか? または、少なくともアクティビティが開始されない場合に画面をオンにする方法 (電源ボタンを押すとアクティビティが表示されることを覚えておいてください)

私はこれについて本当にイライラしているので、今本当に助けが必要です. ご協力ありがとう御座います。

4

2 に答える 2

0

画面が消えたら、アクティビティではなくサービスを開始する必要があります。

于 2013-04-05T16:53:13.940 に答える
0

さらに別のブロードキャスト レシーバーを登録し、画面がオンになったらアクティビティを開始します ( Intent.ACTION_SCREEN_ON)。

2 つの問題:

1) ある受信者から別の受信者にどのようにデータを渡しますか? 私の頭に浮かぶのは、サービスを開始するか、情報をファイル (または共有設定) に保存することです。

2) アクティビティを開始する必要がある 2 つのイベントがある場合はどうなりますか? (例: 「何かが始まった」と「何かが終わった」。) これを解決して、両方のイベントを表示するか、最新のイベントのみを表示する必要があります。

ユーザは画面のロックを解除せずに画面のオンとオフを切り替えることができます ( Intent.ACTION_USER_PRESENT)。また、電話が画面をロックしないように設定されている場合は、ロックが解除されないことに注意してくださいIntent.ACTION_USER_PRESENT

于 2015-10-26T07:40:54.587 に答える