Android获取系统隐藏服务实现锁屏

简介: 引用:http://www.2cto.com/kf/201110/108575.html 实现原理:当按锁屏键时,会发出一个广播,当界面接收到一个广播就可以实现锁频。我们可以调用IDevicePolicyManager服务中的lockNow方法来发送一个广播实现锁屏。

引用:http://www.2cto.com/kf/201110/108575.html

实现原理:当按锁屏键时,会发出一个广播,当界面接收到一个广播就可以实现锁频。我们可以调用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(); 

相关文章
|
2月前
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
2月前
|
IDE Java 开发工具
移动应用与系统:探索Android开发之旅
在这篇文章中,我们将深入探讨Android开发的各个方面,从基础知识到高级技术。我们将通过代码示例和案例分析,帮助读者更好地理解和掌握Android开发。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。让我们一起开启Android开发的旅程吧!
|
1月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
1月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
2月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
93 16
|
2月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS系统的差异及未来发展趋势
本文旨在深入分析Android和iOS两大移动操作系统的核心技术差异、用户体验以及各自的市场表现,进一步探讨它们在未来技术革新中可能的发展方向。通过对比两者的开放性、安全性、生态系统等方面,本文揭示了两大系统在移动设备市场中的竞争态势和潜在变革。
|
2月前
|
算法 JavaScript Android开发
|
2月前
|
安全 搜索推荐 Android开发
揭秘安卓与iOS系统的差异:技术深度对比
【10月更文挑战第27天】 本文深入探讨了安卓(Android)与iOS两大移动操作系统的技术特点和用户体验差异。通过对比两者的系统架构、应用生态、用户界面、安全性等方面,揭示了为何这两种系统能够在市场中各占一席之地,并为用户提供不同的选择。文章旨在为读者提供一个全面的视角,理解两种系统的优势与局限,从而更好地根据自己的需求做出选择。
147 2
|
2月前
|
安全 搜索推荐 程序员
深入探索Android系统的碎片化问题及其解决方案
在移动操作系统的世界中,Android以其开放性和灵活性赢得了广泛的市场份额。然而,这种开放性也带来了一个众所周知的问题——系统碎片化。本文旨在探讨Android系统碎片化的现状、成因以及可能的解决方案,为开发者和用户提供一种全新的视角来理解这一现象。通过分析不同版本的Android系统分布、硬件多样性以及更新机制的影响,我们提出了一系列针对性的策略,旨在减少碎片化带来的影响,提升用户体验。
|
2月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。