Androidの "N"では、Dozeが "Doze on the Go"で拡張されました。アプリが「Doze on the Go」(AKA Doze Light、Doze Extended、Doze 2)に入ったときを追跡できますか?
私は、デバイスが入ったときに検出する方法を探しています。これらの新しいライトは、IDLE状態とIDLE_MAINTENANCE状態になります。 (基本的に、通常のDoze hereと同じ質問です)
Androidの "N"では、Dozeが "Doze on the Go"で拡張されました。アプリが「Doze on the Go」(AKA Doze Light、Doze Extended、Doze 2)に入ったときを追跡できますか?
私は、デバイスが入ったときに検出する方法を探しています。これらの新しいライトは、IDLE状態とIDLE_MAINTENANCE状態になります。 (基本的に、通常のDoze hereと同じ質問です)
TrevorWileyの回答の実装は機能しますが、少し簡略化することができます。はい、NougatのPowerManagerはisLightDeviceIdleMode()
で、@hide
と注釈が付けられています。リフレクションを使用して呼び出すことができます。これは、PowerManagerの内部実装の詳細とは無関係で、より簡潔です。
public static boolean isLightDeviceIdleMode(final Context context) {
boolean result = false;
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm != null) {
try {
Method isLightDeviceIdleModeMethod = pm.getClass().getDeclaredMethod("isLightDeviceIdleMode");
result = (boolean)isLightDeviceIdleModeMethod.invoke(pm);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
Log.e(TAG, "Reflection failed for isLightDeviceIdleMode: " + e.toString(), e);
}
}
return result;
}
ほとんどの場合、TrevorWileyのブロードキャスト用に登録するための文字列の使用に同意します。上記の方法と同じように、リフレクションを使用してフィールドACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED
の値を取得し、ハードコードされた文字列"android.os.action.LIGHT_DEVICE_IDLE_MODE_CHANGED"
にフォールバックすることができます。
PowerManagerのオンラインドキュメントには言及されていませんが、最新のソースコード(API 24リビジョン1)にはこのような解決策があるはずです質問:
String ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED
= "android.os.action.LIGHT_DEVICE_IDLE_MODE_CHANGED"
boolean isLightDeviceIdleMode()
理論的には、意図的に受信者としてコードを登録して、関数の現在の値を確認するだけで済みます。 dumpsys activity broadcasts
で掘り下げたものは、光のドーズ状態が変化したときに意図が実際に送信されることを示しています。
しかし、最新のSDKプラットフォーム(API 24改訂2)は、その中にこれらのシンボルを持っていない - 私はコンパイルエラーを取得(およびjavap
とjar
といくつかの突きは、彼らが本当に存在していないことを示しています)。 Googleに目を向けると、これが意図した設計だと言われています。
上記の同じ文字列をハードコードしてから、リフレクションを使用してAPIで呼び出されたのと同じ機能を呼び出すことは回避策です。このように:
不足しているAPIの調査については、https://code.google.com/p/android/issues/detail?id=222595をご覧ください。 – TrevorWiley
私はGoogleのオフラインに連絡して、最後のコメントに記載されている問題は解決していません。現時点では、公式の回答が含まれています。 – TrevorWiley
私はこれ以上Androidの関連はしていないので、私はこの作品を確認することはできませんが、合理的なので、私はこれを受け入れられた答えに切り替えるよ。誰かがそれに悩まされると、彼らはいつも私の答えに戻ることができます。 – TrevorWiley