永发信息网

Android怎么打开/关闭系统解锁服务

答案:3  悬赏:40  手机版
解决时间 2021-11-09 00:09
Android怎么打开/关闭系统解锁服务
最佳答案
转载 Android如何打开/关闭系统解锁服务?—典型错误分析
  最近正在做一个Android的解锁应用,需要屏蔽系统解锁,并在适当的时候打开系统解锁,在网上search了很多有关系统解锁的资料,学到了很多关于系统解锁方面的知识,同时也发现了很多网友犯下的一个共同的错误。现分享一下:
  错误一:
  总所周知,要关闭系统自带的锁屏服务需要用到以下代码:
  mKeyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
  mKeylock = mKeyguard.newKeyguardLock("");
  mKeylock.disableKeyguard();
  要打开系统锁屏服务需要以下代码:
  mKeylock.reenableKeyguard()
  网上很多朋友对disableKeyguard()的理解为:将屏幕打开并解锁,只要执行这个方法就会是屏幕变亮并自动解锁!同样reenableKeyguard()的作用是关闭屏幕并上锁!
  大错而特错了!
  我们来看看google api对这两个方法的解释:
  disableKeyguard: Disable the keyguard from showing. If the keyguard is currently showing, hide it. The keyguard will be prevented from showing again untilreenableKeyguard() is called.
  reenableKeyguard: Reenable the keyguard. The keyguard will reappear if the previous call todisableKeyguard() caused it it to be hidden.
  所以,disableKeyguard只是关闭系统锁屏服务,调用该方法后并不会立即解锁,而是使之不显示解锁,同样reenableKeyguard是恢复锁屏服务,并不会立即锁屏!
  错误二:
  下面是通过两个按钮来模拟打开/关闭系统锁屏的代码:
  package com.example.keyguard; import android.os.Bundle; import android.app.Activity; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.support.v4.app.NavUtils; public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_key_guard); km = (KeyguardManager)this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); myButtonOff = (Button)findViewById(R.id.buttonOff); myButtonOff.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { km.newKeyguardLock(TAG).disableKeyguard(); } }); myButtonOn = (Button)findViewById(R.id.buttonOn); myButtonOn.setOnClickListener(new Button.OnClickListener(){public void onClick(View arg0) { km.newKeyguardLock(TAG).reenableKeyguard(); } }); } }
  这段代码看起来很完美,但是执行之后会发现:只能关闭锁屏服务,无法恢复锁屏服务!
  是什么原因呢?
  原来是在调用disableKeyguard和reenableKeyguard的时候必须使用同一个KeyguardLock对象!
  程序略加修改:
  package com.example.keyguard; import android.os.Bundle; import android.app.Activity; import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.support.v4.app.NavUtils; public class KeyGuardActivity extends Activity { private Button myButtonOn, myButtonOff; private KeyguardManager km; private KeyguardLock kl; private final String TAG = "KeyGuardTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_key_guard); km = (KeyguardManager)this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); kl = km.newKeyguardLock(TAG); myButtonOff = (Button)findViewById(R.id.buttonOff); myButtonOff.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { kl.disableKeyguard(); } }); myButtonOn = (Button)findViewById(R.id.buttonOn); myButtonOn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { kl.reenableKeyguard(); } }); } }

  终于OK!
全部回答
设置→权限隐私
安全设置里面找
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
联盟哪个英雄有两个普攻计时器
看行列式的时候,如果行数不等于列数,叫几阶
有谁知道这是哪个直播软件?
有气胸的人应怎样疗养
安康市紫阳县两个教育培训中心地址在哪,我要
今年的南星籽这么贵,是留这种,还是卖籽呢?各
吧友,凤城现在还有天天快递吗
现在石狮买房该选哪个楼盘
如何让div固定在页面的某个位置
装修家不刷墙宝可以吗?
"present"到底有几种意思?
什么是多头排列?
每次使用成本是什么意思
万人音乐节现场WiFi如何覆盖
从广州到陕西走高速要经过哪几个省
推荐资讯
装4升水的坛子能多少腌杂胡椒
成语接龙 明哲保身——身不由己——
成都汇融鑫源商贸有限公司怎么去啊,有知道地
牧字有什么特殊含义?
e网情缘地址在什么地方,想过去办事,
在ps里放大了一张图片,怎么知道比原来那张放
乐贝贝托教中心地址在哪,我要去那里办事,
带有板的四字成语
云厨一站什么熟食好吃
送礼物刻字刻什么字好?
顺丰速运今天早上从汉中发货几点到西安西站
怎么用C#访问共享文件夹
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?