uni-app Native.JS监听手机锁屏,解锁,开屏

发布于 1周前 作者 itying888 来自 Uni-App

uni-app Native.JS监听手机锁屏,解锁,开屏

代码已测试过了ctrl+c直接使用

var receiver;  
mui.plusReady(function() {  
    main = plus.android.runtimeMainActivity(); //获取activity  
    // 广播接收  
    var ALARM_RECEIVER = "alarm_receiver";  
    receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
        onReceive: function(context, intent) { //实现onReceiver回调函数  
            var Intent = plus.android.importClass('android.content.Intent');  
            console.log(intent.getAction());  
            //action = intent.getAction();  
            if(intent.getAction() == Intent.ACTION_SCREEN_ON) {  
                console.log('开屏')  

            } else if(intent.getAction() == Intent.ACTION_SCREEN_OFF) {  
                console.log('锁屏')  

            } else if(intent.getAction() == Intent.ACTION_USER_PRESENT) {  
                console.log('解锁')  
                        }  
            result.textContent += '\nAction :' + intent.getAction();  
            main.unregisterReceiver(receiver);  
        }  
    });  
    var IntentFilter = plus.android.importClass('android.content.IntentFilter');  
    var Intent = plus.android.importClass('android.content.Intent');  
    var filter = new IntentFilter();  
    filter.addAction(Intent.ACTION_SCREEN_ON);  
    filter.addAction(Intent.ACTION_SCREEN_OFF);  
    filter.addAction(Intent.ACTION_USER_PRESENT);  
    main.registerReceiver(receiver, filter); //注册监听  

})

表格

信息类别 内容
开发环境 plus.android.runtimeMainActivity()
版本号
项目创建方式

1 回复

在uni-app中,直接监听手机锁屏、解锁和开屏事件并不直接支持,因为uni-app主要面向跨平台开发,原生事件监听通常依赖于具体的平台API。然而,你可以通过原生插件或者自定义原生模块来实现这些功能。

以下是一个基于uni-app和小程序原生插件的示例,演示如何监听手机锁屏和解锁事件(注意:开屏事件通常指的是应用启动时的屏幕显示,这个可以通过应用的生命周期函数来监听)。由于直接监听这些事件在跨平台框架中并不总是可行,这里以Android平台为例,展示如何编写原生插件并集成到uni-app中。

步骤1:编写Android原生插件

创建一个Android原生插件,用于监听锁屏和解锁事件。

// MyPlugin.java
package com.example.plugin;

import android.app.Activity;
import android.app.admin.DeviceAdminReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class MyPlugin extends UniModule {

    private BroadcastReceiver screenReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (Intent.ACTION_USER_PRESENT.equals(action)) {
                // 用户解锁屏幕
                Log.d("MyPlugin", "Screen unlocked");
                callJS("onUnlock");
            } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                // 屏幕关闭
                Log.d("MyPlugin", "Screen locked");
                callJS("onLock");
            }
        }
    };

    @Override
    public void init(Activity activity) {
        super.init(activity);
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_USER_PRESENT);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        activity.registerReceiver(screenReceiver, filter);
    }

    private void callJS(String eventName) {
        evaluateJavascript("uni." + eventName + "()");
    }
}

步骤2:在uni-app中调用原生插件

在你的uni-app项目中,通过uni.requireNativePlugin来调用这个插件。

// 在页面或组件的onLoad中调用
onLoad() {
    const myPlugin = uni.requireNativePlugin('MyPlugin');
    
    // 定义解锁和锁屏的JS函数
    window.uni.onUnlock = () => {
        console.log('Screen unlocked');
        // 可以在这里处理解锁后的逻辑
    };

    window.uni.onLock = () => {
        console.log('Screen locked');
        // 可以在这里处理锁屏后的逻辑
    };

    // 初始化插件(通常是在页面加载时)
    myPlugin.init();
}

请注意,上述代码仅为示例,实际项目中可能需要处理更多的细节,如插件的注册、权限请求等。同时,对于iOS平台,你需要使用Objective-C或Swift编写相应的原生代码,并通过类似的方式集成到uni-app中。

回到顶部