android监听解锁
1. android 怎样收到系统发送的广播
要注册接受广播的处理程序, 有两种方式
在AndroidManifest.xml重注册, 比如监听系统的开机广播和屏幕解锁广播
<receiver android:name="com.bestjoy.app.common.update.BootCompletedReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
这样, 一旦有定义的action发出来,BootCompletedReceiver的onReceive方法就会回调了,这样的监听,不需要你的app已经在运行。
2. 在程序中动态创建监听器, 比如还是解锁广播,
在Activity的onCreate()中生成一个IntentFilter对象
IntentFilter filter=new IntentFilter();
//为IntentFilter添加一个Action
filter.addAction("android.intent.action.USER_PRESENT");
bootCompletedReceiver = newUserPresentReceiver();
registerReceiver(smsReceiver, filter);
在onDestroy的时候去注册
unregisterReceiver(bootCompletedReceiver);
这样的方式只有在Activity生命周期onCreate()-onDestroy()之间有效。
对于一些特俗的系统级别的广播,即使你按照上面的任何一种方式做了, 也可能监听不到, 这是android 系统做了保护了, 网上查一下就知道了。
2. 如何检验android解锁是否成功
解锁成功后会有广播的
摘要 你好,安卓手机应用加密能防偷窥与窃听,加密应用锁是一款隐私防护工具,可以让你给手机应用上锁防止他人窥视。加密应用锁app中提供了应用锁的功能,可以让你给手机上需要加锁的应用上锁,上锁后必须绘制解锁图案或者是输入正确密码才可使用该应用,不然是无法进入使用的。想要上锁成功是需要给予相关权限的,不然在APP内显示应用上锁了也没有效果。加密应用锁APP还提供了伪装成计算器等应用功能,可以让你将加密应用锁app进行隐藏。
4. 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); /* 获取KeyGuardManager对象 */ 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; /** * @author Onejune * @function 打开/关闭系统锁屏服务测试 * @note 在打开/关闭系统锁屏服务时必须使用同一个KeyguardLock对象,否则出错 */ 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); /* 获取KeyGuardManager对象 */ km = (KeyguardManager)this.getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); /* 获取KeyguardLock对象 */ 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!
5. android开发中如何捕捉自动休眠灰屏的这个事件
捕捉自动休眠灰屏的事件,可以通过监听系统的广播获得当前手机屏幕的状态,广播需要在注册文件中注册,具体的实现代码如下:
public class ScreenListener {
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;
public ScreenListener(Context context) {
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
}
/**
* screen状态广播接收者
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver {
private String action = null;
@Override
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
if (Intent.ACTION_SCREEN_ON.equals(action)) { // 开屏
mScreenStateListener.onScreenOn();
} else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 锁屏
mScreenStateListener.onScreenOff();
} else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解锁
mScreenStateListener.onUserPresent();
}
}
}
/**
* 开始监听screen状态
*
* @param listener
*/
public void begin(ScreenStateListener listener) {
mScreenStateListener = listener;
registerListener();
getScreenState();
}
/**
* 获取screen状态
*/
private void getScreenState() {
PowerManager manager = (PowerManager) mContext
.getSystemService(Context.POWER_SERVICE);
if (manager.isScreenOn()) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}
/**
* 停止screen状态监听
*/
public void unregisterListener() {
mContext.unregisterReceiver(mScreenReceiver);
}
/**
* 启动screen状态广播接收器
*/
private void registerListener() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}
public interface ScreenStateListener {// 返回给调用者屏幕状态信息
public void onScreenOn();
public void onScreenOff();
public void onUserPresent();
}
}
在上面的代码中,用到了动态注册广播,在需要监听屏幕状态的activity中,当不需要监听的时候,如activity finish的时候,使用unregisterListener解除广播监听;
下面是在Activity中调用;
ScreenListener l = new ScreenListener(this);
l.begin(new ScreenStateListener() {
@Override
public void onUserPresent() {
Log.e("onUserPresent", "onUserPresent");
}
@Override
public void onScreenOn() {
Log.e("onScreenOn", "onScreenOn");
}
@Override
public void onScreenOff() {
Log.e("onScreenOff", "onScreenOff");
}
});
通过以上步骤即实现了对屏幕状态的监听.
6. android开发密码解锁的api
我写过一个类似于 windows多用户启动的 写了个开头 实现了开机启动以及屏蔽各种按键,所以lz可以参考一下如何实现应用的开机启动,这个是要改xml的。
然后解锁后输入密码 没做过 难道要写一个service来监听解锁么??
7. android锁屏开发难题,系统锁出现后如何自动取消的问题
(1)看看能不能捕获到锁屏的广播(类似监听通话广播)
(2)看看能不能监听锁屏状态(类似监听通话状态改变)
之前,我做个万能钥匙,给android手机解锁用的,不过要注册设备管理器的权限。
你也可以注册设备管理器权限,然后监听设备状态,如果设备状态改变(变成加锁),你就调用解锁方法。
8. android怎么实现自动解锁,和自动打开应用程
当你打开某一软件,你不按退出,直接来个点房子,然后他就后台运行了。你想在手机加速时,他还运行就得去把他给弄后台启动。
9. Android中判断屏幕是否亮屏和是否解锁功能
1.屏幕是否亮屏:
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);//true为打开,false为关闭boolean ifOpen = powerManager.isScreenOn();
2.屏幕是否解锁:
KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();
当前的屏幕锁有五种设置,分别是没有设置屏幕锁,滑动解锁,图案解锁,PIN码解锁,密码解锁。
如果没有设置屏幕锁,返回值会一直为FALSE。如果用户设置了屏幕锁(包括后四种锁中的任何一种),屏幕不亮时返回TRUE,屏幕亮时,解锁前返回TRUE,解锁后返回FALSE。
有的时候我们只需一个判断就能满足需求,但有时我们需要这两个相互结合满足需求。
以上所述是小编给大家介绍的Android中判断屏幕是否亮屏和是否解锁功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
10. Android 4.1.2 为什么写的广播注册后 必须运行一次activity才能...
SCREEN_ON和SCREEN_OFF只能在Activity和Service里面用,广播接收器不行,service不会自动启动 查看更多答案>>