在 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 项目中使用,无需安装额外的插件。记得在适当的生命周期函数中调用这些方法。
网友回复