BroadcastReceiver之实现锁屏、解锁例子
来源:互联网 发布:金融科技 知乎 编辑:程序博客网 时间:2024/06/05 13:52
好久没有写android的小例子了,由于前几天写了一篇关于Intent.Action的文章(http://blog.csdn.net/ljphhj/article/details/38796739),有朋友私信问我关于ACTION_SCREEN_ON和ACTION_SCREEN_OFF还有ACTION_USER_PRESENT三个Action的用法,由于作为一个总结博文,当时并没有详细讲,ACTION_SCREEN_ON和ACTION_SCREEN_OFF只能通过动态注册的方式(代码内context.register和unregister),而ACTION_USER_PRESENT则是动态、静态注册两种方式都可以。下面我们通过这个锁屏、解锁相关的BroadcastReceiver来了解一下。
package cn.panghu.activitys;import com.example.broadcastsappdemo.R;import android.app.Activity;import android.app.KeyguardManager;import android.app.KeyguardManager.KeyguardLock;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.PowerManager;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class ScreenLockedActivity extends Activity{private ScreenBroadcastReceiver screenBroadcastReceiver = null;private Context context = null;private Button lockedScreenBtn = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);context = getApplicationContext();setContentView(R.layout.screen_lock_layout);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();//注册这个广播registerScreenBroadcastReceiver();}private void registerScreenBroadcastReceiver() {screenBroadcastReceiver = new ScreenBroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Intent.ACTION_SCREEN_OFF);//当屏幕锁屏的时候触发intentFilter.addAction(Intent.ACTION_SCREEN_ON);//当屏幕解锁的时候触发intentFilter.addAction(Intent.ACTION_USER_PRESENT);//当用户重新唤醒手持设备时触发context.registerReceiver(screenBroadcastReceiver, intentFilter);Log.i("screenBR", "screenBroadcastReceiver注册了");}//重写广播class ScreenBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {String strAction = intent.getAction();if (Intent.ACTION_SCREEN_OFF.equals(strAction)){//屏幕锁屏Log.i("screenBR", "屏幕锁屏:ACTION_SCREEN_OFF触发");Toast.makeText(context, "锁屏了", Toast.LENGTH_SHORT).show();}else if (Intent.ACTION_SCREEN_ON.equals(strAction)){//屏幕解锁(实际测试效果,不能用这个来判断解锁屏幕事件)//【因为这个是解锁的时候触发,而解锁的时候广播还未注册】Log.i("screenBR", "屏幕解锁:ACTION_SCREEN_ON触发");Toast.makeText(context, "解锁了", Toast.LENGTH_SHORT).show();}else if (Intent.ACTION_USER_PRESENT.equals(strAction)){//屏幕解锁(该Action可以通过静态注册的方法注册)//在解锁之后触发的,广播已注册Log.i("screenBR", "屏幕解锁:ACTION_USER_PRESENT触发");Toast.makeText(context, "解锁了", Toast.LENGTH_SHORT).show();}else{//nothing}}}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();context.unregisterReceiver(screenBroadcastReceiver);Log.i("screenBR", "screenBroadcastReceiver取消注册了");}}
由于是静态注册的方式,所以大家可能会觉得那我要怎么让它长久地监听这锁屏、解锁屏幕的广播呢?
首先我们再次强调ACTION_SCREEN_ON和ACTION_SCREEN_OFF只能通过动态注册的方式(代码内context.register和unregister),而ACTION_USER_PRESENT则是动态、静态注册两种方式都可以。
那么我们的突破口便是:我们可以动态地注册一个关于屏幕解锁后(ACTION_USER_PRESENT)的广播者,并且在这个广播的onReceive方法中实现我们要做的一些操作。例如我们可以开启一个Service服务,用于注册我们所想要的这个Broadcast Receiver
1.在Service中定义receiver
- private BroadcastReceiver mScreenFilterReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
- //做要求的处理
- }else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
- }
- }
- };
2.在Service的onCreate中定义IntentFilter及注册receiver
- IntentFilter ScreenFilter = new IntentFilter();
- ScreenFilter.addAction(Intent.ACTION_SCREEN_ON);
- ScreenFilter.addAction(Intent.ACTION_SCREEN_OFF);
- registerReceiver(mScreenFilterReceiver, ScreenFilter);
3.在Service的onDestroy中要反注册这个receiver。
- unregisterReceiver(mScreenFilterReceiver);
- BroadcastReceiver之实现锁屏、解锁例子
- BroadcastReceiver例子
- 自定义锁屏demo之滑动解锁
- Service结合BroadcastReceiver实现跨进程通信的例子
- Android 7.0 锁屏解锁之向上滑动显示解锁界面分析
- 线程编程之:加锁解锁最简单例子
- Android之九宫格解锁的实现
- Android之九宫格解锁的实现
- Android之九宫格解锁的实现
- ios实现锁屏解锁功能时候问题
- Android 仿小米锁屏实现九宫格解锁
- Android学习 - 自定义锁屏demo之滑动解锁
- BroadcastReceiver三个常见的例子
- Android开发之使用BroadcastReceiver实现开机自动启动
- 数据库锁表之解锁原理
- 锁屏和解锁屏
- VIM锁屏与解锁
- 关于解锁和锁屏
- android ContentResolver详解
- Spring AOP 详解
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to .
- 有关单日历空间
- 错误记录
- BroadcastReceiver之实现锁屏、解锁例子
- myeclipse项目里有红色感叹号
- jquery和dom对象互转
- java.lang.OutOfMemoryError: unable to create new native thread
- 数据整形reshape
- java socket多线程编程
- Ajax请求,注意事项
- 交通灯管理系统
- 转载:中国电子工程师的悲哀