本文实例讲述了Android编程获取系统隐藏服务实现锁屏的方法。分享给大家供大家参考,具体如下:
实现原理:当按锁屏键时,会发出一个广播,当界面接收到一个广播就可以实现锁频。我们可以调用IDevicePolicyManager服务中的lockNow方法来发送一个广播实现锁屏。
IDevicePolicyManager是被系统隐藏掉的,需要通过反射还获取此服务。
步骤:
1.创建MyAdmin的广播接收者继承DeviceAdminReceiver
2.通过反射 ,获取IDevicePolicyManager服务 ,IDevicePolicyManager通过AIDL来获取出来。
3.注册广播接收者为admin设备
4.获取服务中的方法
效果图:
注册MyAdmin广播接收者:
<receiver android:name=".MyAdmin"> <meta-data android:name="android.app.device_admin" android:resource="@xml/my_admin" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
my_admin.xml:
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> </uses-policies> </device-admin>
反射获取服务、注册权限、实现锁屏:
public class LockActivity extends Activity { IDevicePolicyManager mService; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //锁屏 public void lock(View view){ try { //通过反射获取到sdk隐藏的服务 Method method = Class.forName("android.os.ServiceManager") .getMethod("getService", String.class); IBinder binder = (IBinder) method.invoke(null,//激活服务 new Object[] { Context.DEVICE_POLICY_SERVICE }); mService = IDevicePolicyManager.Stub.asInterface(binder); //定义组件的名字 ComponentName mAdminName = new ComponentName(this, MyAdmin.class); //注册权限 if (mService != null) { //判断自定义的广播接受者 是不是被注册成 deviceadmin的权限 if (!mService.isAdminActive(mAdminName)) { Intent intent = new Intent( DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); startActivity(intent); } //调用服务实现锁屏 mService.lockNow(); //设置解锁密码 mService.resetPassword("123", 0); } } catch (Exception e) { e.printStackTrace(); } } }
AIDL:
/* ** ** Copyright 2010, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package android.app.admin; import android.content.ComponentName; /** * Internal IPC interface to the device policy service. * {@hide} */ interface IDevicePolicyManager { void setPasswordQuality(in ComponentName who, int quality); int getPasswordQuality(in ComponentName who); void setPasswordMinimumLength(in ComponentName who, int length); int getPasswordMinimumLength(in ComponentName who); boolean isActivePasswordSufficient(); int getCurrentFailedPasswordAttempts(); void setMaximumFailedPasswordsForWipe(in ComponentName admin, int num); int getMaximumFailedPasswordsForWipe(in ComponentName admin); boolean resetPassword(String password, int flags); void setMaximumTimeToLock(in ComponentName who, long timeMs); long getMaximumTimeToLock(in ComponentName who); void lockNow(); void wipeData(int flags); void setActiveAdmin(in ComponentName policyReceiver); boolean isAdminActive(in ComponentName policyReceiver); List<ComponentName> getActiveAdmins(); boolean packageHasActiveAdmins(String packageName); void removeActiveAdmin(in ComponentName policyReceiver); void setActivePasswordState(int quality, int length); void reportFailedPasswordAttempt(); void reportSuccessfulPasswordAttempt(); }
希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍Android编程实现禁止系统锁屏与解锁亮屏的方法,包括了Android编程实现禁止系统锁屏与解锁亮屏的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现禁止系统锁屏与解锁亮屏的方法。分享给大家供大家参考,具体如下: 需求: 某个时刻任务执行完毕,关闭屏幕,某时刻再开启屏幕继续执行任务 通常情况下,不设置屏幕常亮,系统会自动锁屏,锁屏后不能从代码解锁(
本文向大家介绍Android编程实现Listview点击展开和隐藏的方法,包括了Android编程实现Listview点击展开和隐藏的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现Listview点击展开和隐藏的方法。分享给大家供大家参考,具体如下: 代码较多,所以找关键点大家贴出来,相信大家看了之后很容易就明白的, 在listview的activity中 在自
本文向大家介绍android编程实现系统图片剪裁的方法,包括了android编程实现系统图片剪裁的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android编程实现系统图片剪裁的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍js获取隐藏元素宽高的实现方法,包括了js获取隐藏元素宽高的实现方法的使用技巧和注意事项,需要的朋友参考一下 网上有一些js获取隐藏元素宽高的方法,但是可能会存在某些情况获取不了。 例如: test获取得了,但是test2_child是获取不到的。鉴于这种情况,于是自己写了一个方法解决。 解决思路: 1. 获取元素(拿宽高那个)所有隐藏的祖先元素直到body元素,包括自己。 2. 获
本文向大家介绍Android编程实现获得手机屏幕真实宽高的方法,包括了Android编程实现获得手机屏幕真实宽高的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现获得手机屏幕真实宽高的方法。分享给大家供大家参考,具体如下: 补:改进版 (弥补了原先非支持版本的一些异常): 希望本文所述对大家Android程序设计有所帮助。
更多面试题总结请看:【面试题】技术面试题汇总 互斥锁的实现 1. 禁止中断 进入临界区前禁止中断,离开之前恢复中断。这样任何中断都不会发生,包括时钟中断,也就是说 CPU 不会被切换到其他线程。 优点是实现简单。缺点有很多: 给用户禁止中断的权利很危险,如果用户进程死循环,操作系统可能永远无法获取控制权 只适用于单 CPU 的场景,其他 CPU 上运行的线程仍然可以访问临界资源,因为不同 CPU