【问题标题】:Phone awake while running the application运行应用程序时手机唤醒
【发布时间】:2015-11-26 11:04:24
【问题描述】:

我实现了一个应用程序并且它工作正常。现在我想知道如何防止在特定应用程序运行时进入睡眠手机。我尝试使用唤醒锁来实现现在我想实现在给定时间后运行屏幕保护程序并再次正确运行当前应用程序的触摸屏。因为使用唤醒锁定手机唤醒直到应用程序运行。但是用户离开了几次我想运行屏幕保护程序直到重新开始

【问题讨论】:

  • 不明白你想要什么。使用WakeLock,您可以让设备在运行应用程序时保持唤醒状态。
  • 您要保持应用运行还是要防止屏幕熄灭?
  • 保持应用运行

标签: android


【解决方案1】:

保持屏幕开启

最好的方法是在你的活动中使用 FLAG_KEEP_SCREEN_ON。

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  }

另一种实现方式是在应用程序的布局 XML 文件中,使用 android:keepScreenOn 属性:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    ...
</RelativeLayout>

保持 CPU 开启

如果您需要保持 CPU 运行以在设备进入睡眠状态之前完成某些工作,您可以使用称为唤醒锁的 PowerManager 系统服务功能。唤醒锁允许您的应用程序控制主机设备的电源状态。

创建和保持唤醒锁会对主机设备的电池寿命产生巨大影响。因此,您应该仅在绝对必要时使用唤醒锁,并尽可能短地持有它们。例如,您永远不需要在活动中使用唤醒锁。如上所述,如果您想在 Activity 中保持屏幕开启,请使用 FLAG_KEEP_SCREEN_ON。

使用唤醒锁的一个合理案例可能是后台服务需要获取唤醒锁以在屏幕关闭时保持 CPU 运行以完成工作。不过,由于这种做法会影响电池寿命,因此应尽量减少这种做法。

要使用唤醒锁,第一步是将 WAKE_LOCK 权限添加到应用程序的清单文件中:

<uses-permission android:name="android.permission.WAKE_LOCK" />

如果您的应用包含使用服务执行某些工作的广播接收器,您可以通过 WakefulBroadcastReceiver 管理唤醒锁定,如使用 WakefulBroadcastReceiver 中所述。这是首选方法。如果您的应用不遵循该模式,您可以通过以下方式直接设置唤醒锁定:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "MyWakelockTag");
wakeLock.acquire();

要释放唤醒锁,请调用wakelock.release(). 这将释放您对 CPU 的要求。请务必在您的应用使用完毕后立即释放唤醒锁,以免耗尽电池电量。

【讨论】:

    【解决方案2】:

    在您的清单中添加此权限:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

    并将其添加到您的 onCreate 中:

    @Override
        protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);    
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2021-02-22
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多