栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

本文实例讲述了Android编程获取系统隐藏服务实现锁屏的方法。分享给大家供大家参考,具体如下:

实现原理:当按锁屏键时,会发出一个广播,当界面接收到一个广播就可以实现锁频。我们可以调用IDevicePolicyManager服务中的lockNow方法来发送一个广播实现锁屏。

IDevicePolicyManager是被系统隐藏掉的,需要通过反射还获取此服务。

步骤:

1.创建MyAdmin的广播接收者继承DeviceAdminReceiver
2.通过反射 ,获取IDevicePolicyManager服务 ,IDevicePolicyManager通过AIDL来获取出来。
3.注册广播接收者为admin设备
4.获取服务中的方法

效果图:

  

注册MyAdmin广播接收者:


  
  
    
  


my_admin.xml:



    
 
 
 
 
 
    


反射获取服务、注册权限、实现锁屏:

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:


package android.app.admin;
import android.content.ComponentName;

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 getActiveAdmins();
  boolean packageHasActiveAdmins(String packageName);
  void removeActiveAdmin(in ComponentName policyReceiver);
  void setActivePasswordState(int quality, int length);
  void reportFailedPasswordAttempt();
  void reportSuccessfulPasswordAttempt();
}

希望本文所述对大家Android程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/163714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号