1

AlarmManager から画面をオンにする BroadcastReceiver を作成しました。これが私のコードですOnReceive

@Override
public void onReceive(Context arg0, Intent arg1) {
    Log.i("", "OnReceive");

    // Initializes the PowerManager.
    PowerManager powerManager = (PowerManager) arg0
            .getSystemService(Context.POWER_SERVICE);

    // Wakes device.
    WakeLock wakeLock = powerManager.newWakeLock(
            PowerManager.FULL_WAKE_LOCK
                    | PowerManager.ACQUIRE_CAUSES_WAKEUP
                    | PowerManager.ON_AFTER_RELEASE, "Stretching");
    wakeLock.acquire();
    wakeLock.release();
    wakeLock = null;

    // Calls activity.
    Intent intent = new Intent(arg0, TrainingActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    arg0.startActivity(intent);
}

FULL_WAKE_LOCKが廃止されたため問題が発生したため、 を使用しようとしましPARTIAL_WAKE_LOCKたが、画面がオンになりません。代わりに何を使用すればよいですか? この部分的なウェイクロック中に画面をオンにする方法を検索しましたが、それも使用していFULL_WAKE_LOCKます。

4

2 に答える 2

0

廃止されたものを使用するFULL_WAKE_LOCK(そして、アプリが将来動作しなくなる可能性に備える) か、アプリを作成しないでください。PARTIAL_WAKE_LOCK具体的には、画面をオンにしません。

于 2013-09-07T16:07:18.087 に答える
0

残念ながら、FULL_WAKE_LOCK はバッテリーのエネルギー節約のために廃止されました。

唯一のもっともらしい回避策は、Android バージョンをテストすることです。バージョンが KitKat より前、つまり Lollipop 以降の場合 (KitKat FULL_WAKE_LOCK が正常に動作していましたが、API LEVEL 17 で非推奨になるまで)、FULL_WAKE_LOCK を使用できます。それ以外の場合は PARTIAL_WAKE_LOCK を使用します。このような:

    if (wakeLock != null) wakeLock.release();

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(
        (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT ? PowerManager.PARTIAL_WAKE_LOCK : PowerManager.FULL_WAKE_LOCK) |
        PowerManager.ACQUIRE_CAUSES_WAKEUP |
        PowerManager.ON_AFTER_RELEASE, "Some Tag");

    wakeLock.acquire(10000);

それが役立つことを願っています!

于 2015-04-14T15:37:36.877 に答える