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


