問題タブ [android-powermanager]
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.
android - Android の Doze モードが原因で、AlarmManager を使用して正確な目覚まし時計アプリを作成することはできませんか?
Android用のアラームアプリを作成しようとして、AlarmManagerを使用しています。電話がスリープ状態のときに setRepeating が機能していないことに気付きました。そこで、setExactAndAllowWhileIdle を試してみました。
しかし、私はこれを読みました:
他のアラームとは異なり、システムはこのタイプのアラームを自由に再スケジュールして、同じアプリからのアラームであっても、他のアラームとは異なる順序で発生させます。これは、デバイスがアイドル状態のときに明らかに発生します (このアラームは、アプリからの他のアラームが後で保留される場合、アイドル中にオフになる可能性があるため) が、アイドル状態ではない場合でも発生する可能性があります。アプリケーションがこの動作を選択しているため、OS は、これらのアラームを通常の正確なアラームよりも柔軟にスケジュールできることに注意してください。デバイスがアイドル状態のときは、バッテリ寿命を最適化するために、スケジューリングをさらに自由に行う必要があります。
目覚まし時計のように正確なタイミングが必要です。ユーザーが午前 6:00 に設定してから、6:01 または 6:02 に鳴らすのは変です! 電話がアイドル状態でまったく鳴らないのは壊滅的です!
今何ができますか?
android - AlarmManager によってアクティビティが開始されたときに PowerManager がトリガーされない
私はアーティストで、いくつかの Android スマートフォンを使ったインスタレーションに取り組んでいます。私は Java/Android プログラミングの専門家ではありません。私はやることで学んでいるだけで、stackoverflow はとても役に立ちます。異なる Android バージョン (2.3-4.4) の異なるデバイスを使用しています。デバイスは常に USB 経由で給電されます。アプリは展示会とリゾートの営業時間中にのみ実行され、翌日には自動的に実行されます。スケジューリングには、AlarmManager を使用しています。現在、一部のデバイスで自動再起動に問題がありますが、他のデバイスでは期待どおりに動作します。
以下は、スケジューリングの重要な一部の抜粋です。
AndroidManifest.xml には、次の権限が設定されています。
特に WAKE_LOCK パーミッションが設定されています。
onCreate は次のように始まります。
PowerManager.ACQUIRE_CAUSES_WAKEUP が使用されています。私の理解では、状態に関係なく画面を表示する必要があります。
onDestroy で私は使用しています:
このスニペットは、「展示会の終了時間に達した」ために finish() が呼び出されたときに実行されます。前述のように、これはほとんどのデバイスで機能します。アプリが自動的に再起動しないように見えるデバイスでは、たとえば電源ボタンを押すか、USB を切断することによって画面が表示されるとすぐにアプリが起動します (たとえば、ラップトップを接続して logcat を読み取るため)。次のようなものを見つけます (LG P-875 Android 4.1.3 は 14:00:xx に開始する必要があります)
私にはこれで問題ないように見えますが、PowerManager は反応しませんでした。この例では、数分後にラップトップを接続するために USB を切断した瞬間に PowerManager が反応しました。
最後の 2 行目では、onCreate で送信したリクエストが処理されているようです (tag=MyWakeLock)
執筆中、次のテストで PowerManager が自動的に反応したが、AlarmManager アクションから約 10 分の遅延しかなかったことに気付きました。
私は何を間違っていますか?onDestroy で WakeLock を解放する必要がありますか? 問題の解決策はありますか?