当前位置:操作系统 > 安卓/Android >>

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.asInte易做图ce(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); 

             } 

   &nb

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,