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;
        }
    }
}


目录
相关文章
|
1月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
730 2
|
24天前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
1月前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
19 2
|
1月前
|
XML Android开发 数据格式
37. 【Android教程】基于监听的事件处理机制
37. 【Android教程】基于监听的事件处理机制
33 2
|
2月前
|
缓存 Android开发 开发者
安卓系统优化:提升手机性能的秘诀
【5月更文挑战第31天】本文将探讨如何通过一系列简单的步骤和技巧,对安卓系统进行优化,以提升手机的性能。我们将从清理无用文件、管理后台应用、调整系统设置等方面入手,帮助你的安卓设备运行更加流畅。
|
2月前
|
Android开发
【苹果安卓通用】xlsx 和 vCard 文件转换器,txt转vCard文件格式,CSV转 vCard格式,如何批量号码导入手机通讯录,一篇文章说全
本文介绍了如何快速将批量号码导入手机通讯录,适用于企业客户管理、营销团队、活动组织、团队协作和新员工入职等场景。步骤包括:1) 下载软件,提供腾讯云盘和百度网盘链接;2) 打开软件,复制粘贴号码并进行加载预览和制作文件;3) 将制作好的文件通过QQ或微信发送至手机,然后按苹果、安卓或鸿蒙系统的指示导入。整个过程简便快捷,可在1分钟内完成。
|
2月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
|
1月前
|
前端开发 JavaScript Android开发
手机APP开发|基于安卓APP实现掌上党支部——党员app
手机APP开发|基于安卓APP实现掌上党支部——党员app
|
2月前
|
Android开发
Android监听USB设备插拔
Android监听USB设备插拔
284 7
|
2月前
|
Android开发
Android监听蓝牙广播
Android监听蓝牙广播
22 1