首页 > 系统 > Android > 正文

Android编程获取系统隐藏服务实现锁屏的方法

2020-04-11 11:05:30
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表