Android--监听手机解锁

简介: 版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79876698 权限 ...
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79876698

权限

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<receiver android:name=".OpenBrodcast">
        <intent-filter  >
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
        </receiver>

/**
 * 解锁监听
 */

import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.util.List;

public class OpenBrodcast extends BroadcastReceiver {

    public static PowerManager.WakeLock mWakeLock = null;
    //判断是否运行在模拟器上
    public boolean isRunningInEmualtor() {
        boolean qemuKernel = false;
        Process process = null;
        DataOutputStream os = null;

        try {
            process = Runtime.getRuntime().exec("getprop ro.kernel.qemu");
            //
            os = new DataOutputStream(process.getOutputStream());//
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(process.getInputStream(), "GBK"));
            os.writeBytes("exit\n");
            os.flush();
            process.waitFor();
            // getprop ro.kernel.qemu == 1 在模拟器
            // getprop ro.product.model == "sdk" 在模拟器
            // getprop ro.build.tags == "test-keys" 在模拟器
            qemuKernel = (Integer.valueOf(in.readLine()) == 1);
            // Log.d("com.droider.checkqemu", "检测到模拟器:" + qemuKernel);
        } catch (Exception e) {
            qemuKernel = false; //
            //Log.d("com.golden.plugin","run faild" + e.getMessage());
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (process != null)
                    process.destroy();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //Log.d("com.golden.plugin","run finally");
        }
        return qemuKernel;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        ActivityManager am = (ActivityManager) context
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningServiceInfo> serviceList = am
                .getRunningServices(Integer.MAX_VALUE);

        //判断我们的服务是否在运行
        if (isRunningInEmualtor()) {
            System.exit(0);
        } else {
            boolean isRun = false;
            //跳转到后台服务(这里执行自己要完成的事情)
            intent.setClass(context, StartService.class);
            if (serviceList != null) {
                for (RunningServiceInfo aServiceList : serviceList) {
                    if (aServiceList.service.getClassName().equals(
                            "OpenAndroid.MyService")) {
                        isRun = true;
                        break;
                    }
                }
            }
            //获取设备电源锁
            acquireWakeLock(context);

            if (isRun) {

            }else{
                context.startService(intent);

            }
        }
    }


    //申请设备电源锁
    public static void acquireWakeLock(Context context) {
        releaseWakeLock();
        if (null == mWakeLock) {//屏幕唤醒
            releaseWakeLock();
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            //创建电源锁对象
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "StartService");
            if (null != mWakeLock) {
                mWakeLock.acquire();//获取到锁
            }
        }
    }

    //屏幕解锁
    public static void cutScreenLock(Context context) {
        KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
        KeyguardManager.KeyguardLock kl = km.newKeyguardLock("StartupReceiver");//参数是LogCat里用的Tag
        kl.disableKeyguard();
    }

    //释放设备电源锁
    public static void releaseWakeLock() {
        if (null != mWakeLock) {
            mWakeLock.release();
            mWakeLock = null;
        }
    }
}


目录
相关文章
|
2月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
2月前
|
机器学习/深度学习 人工智能 Android开发
安卓智能手机操作系统演化史
【2月更文挑战第5天】 本文通过对安卓智能手机操作系统的演化历程进行探讨,分析了安卓系统从诞生至今的发展脉络和关键技术革新,从最初的版本到如今的最新版本,探讨了其在移动互联网时代的重要作用,以及未来可能的发展方向。
|
3月前
|
前端开发 小程序
监听手机屏幕旋转 横屏 竖屏 dome
监听手机屏幕旋转 横屏 竖屏 dome
|
3月前
|
JavaScript Android开发
手机也能搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站
手机也能搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站
36 0
|
1月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
50 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
1月前
|
网络协议 关系型数据库 MySQL
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
安卓手机termux上安装MariaDB数据库并实现公网环境下的远程连接
|
1月前
|
JavaScript Android开发
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
|
2月前
|
安全 Android开发
如何在Android手机上安装第三方应用?
【2月更文挑战第4天】在Android系统中,安装第三方应用是一个常见的需求。本文将介绍如何在Android手机上安装第三方应用,并提供详细的步骤和注意事项。
162 2
|
3月前
|
安全 网络协议 Linux
【公网远程手机Android服务器】安卓Termux搭建Web服务器
【公网远程手机Android服务器】安卓Termux搭建Web服务器
65 0
|
4月前
|
Android开发
安卓手机快速过检测完成某某学习
安卓手机快速过检测完成某某学习
22 0

热门文章

最新文章