1

我创建了一个 BroadcastReceiver 从 AlarmManager 打开屏幕。这是我的代码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 回答