+
95
-

回答

在 UniApp 中实现 App 打开后防止自动息屏和锁屏,你可以使用 uni.requireNativePlugin 来调用原生插件。以下是实现这个功能的步骤:

安装插件

首先,你需要安装一个支持控制屏幕常亮的插件。一个常用的插件是 "keep-screen-on"。你可以在项目根目录下运行以下命令安装:

npm install keep-screen-on
配置插件

在 manifest.json 文件中,确保你已经配置了插件:

{
  "plugins": {
    "keep-screen-on": {}
  }
}
使用插件

在你想要保持屏幕常亮的页面或组件中,添加以下代码:

<script>
export default {
  onLoad() {
    // 检查平台
    if (uni.getSystemInfoSync().platform === 'android' || uni.getSystemInfoSync().platform === 'ios') {
      const keepScreenOn = uni.requireNativePlugin('keep-screen-on')

      // 开启屏幕常亮
      keepScreenOn.keepScreenOn({
        success: () => {
          console.log('屏幕常亮已开启')
        },
        fail: (error) => {
          console.error('开启屏幕常亮失败', error)
        }
      })
    }
  },
  onUnload() {
    // 在页面卸载时关闭屏幕常亮(可选)
    if (uni.getSystemInfoSync().platform === 'android' || uni.getSystemInfoSync().platform === 'ios') {
      const keepScreenOn = uni.requireNativePlugin('keep-screen-on')

      keepScreenOn.cancelKeepScreenOn({
        success: () => {
          console.log('屏幕常亮已关闭')
        },
        fail: (error) => {
          console.error('关闭屏幕常亮失败', error)
        }
      })
    }
  }
}
</script>
注意事项这个方法只能在 App 环境下使用,不适用于 H5 或小程序。持续保持屏幕常亮会增加电池消耗,建议只在必要的时候使用。某些设备或系统版本可能会限制长时间保持屏幕常亮的功能。记得在不需要保持屏幕常亮时(如页面卸载时)关闭此功能。替代方案

如果你不想使用第三方插件,UniApp 也提供了一些原生接口:

对于 Android,你可以使用 plus.android.invoke 来调用 Wakelock:
// 开启屏幕常亮
function keepScreenOnAndroid() {
  if (uni.getSystemInfoSync().platform === 'android') {
    var main = plus.android.runtimeMainActivity();
    var window = main.getWindow();
    plus.android.invoke(window, "addFlags", 0x80000000);
  }
}

// 关闭屏幕常亮
function cancelKeepScreenOnAndroid() {
  if (uni.getSystemInfoSync().platform === 'android') {
    var main = plus.android.runtimeMainActivity();
    var window = main.getWindow();
    plus.android.invoke(window, "clearFlags", 0x80000000);
  }
}
对于 iOS,你可以使用 plus.ios.invoke 来设置 idleTimerDisabled:
// 开启屏幕常亮
function keepScreenOnIOS() {
  if (uni.getSystemInfoSync().platform === 'ios') {
    var UIApplication = plus.ios.import("UIApplication");
    var app = UIApplication.sharedApplication();
    app.setIdleTimerDisabled(true);
    plus.ios.deleteObject(app);
  }
}

// 关闭屏幕常亮
function cancelKeepScreenOnIOS() {
  if (uni.getSystemInfoSync().platform === 'ios') {
    var UIApplication = plus.ios.import("UIApplication");
    var app = UIApplication.sharedApplication();
    app.setIdleTimerDisabled(false);
    plus.ios.deleteObject(app);
  }
}

这些原生方法可以直接在你的 UniApp 项目中使用,无需安装额外的插件。记得在适当的生命周期函数中调用这些方法。

网友回复

我知道答案,我要回答