Android 四大组件学习之BroadcastReceiver四
来源:互联网 发布:java中三个fina 编辑:程序博客网 时间:2024/05/04 01:01
本节学习系统中特殊的广播接收者。
我们前面几节不是说了,当广播接受者一旦注册到系统中,当系统发送的广播和你注册的广播的action匹配时,系统就会启动广播接收者所在的进程。除非用户手动停止广播接收者所在的进程。但是生活中有这样一种情况,比如说:我在玩网络游戏,假设说游戏本身在系统电量低的情况下,会自动保存当前游戏的进度,也就是存档的。可以这么说,此广播接受者只有在用户玩游戏时才需要启动,别的时候用户是不需要的。如果此广播接收者一直常驻于系统,那不是很浪费系统资源。所以我们就需要动态的启动广播接收者,和停止广播接收者。可是大家知道,广播接收者只要在清单文件中注册过了的,就会永远启动的。所以唯一的办法就是不在清单文件中注册,在代码中动态注册。
说了这么多,就是说可以用代码动态的注册广播接收者。
说到在代码中注册广播接收者,那Android系统中规定,屏幕锁屏和解锁,以及电量改变必须用代码注册,在清单文件中注册是不起作用的。那是因为,屏幕锁屏和解锁,以及电量改变事件太频繁发生了。如果在清单文件中注册,将会对系统消耗很大。
那我们就用屏幕解锁和锁屏实现代码中注册广播接收者
这次我们用服务去创建广播接收者
Activity的代码:也就是两个按钮,一个用于创建创建服务,一个用于停止服务
public class MainActivity extends Activity {Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this, ScreenService.class); } //启动服务 public void openScreen(View v) { Log.i("MainActivity", "启动广播接收者服务"); startService(intent); } //关闭服务 public void closeScreen(View v) { Log.i("MainActivity", "关闭广播接收者服务"); stopService(intent); }}然后Service的代码:
public class ScreenService extends Service {private ScreenReceiver sReceiver;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {// 注册广播接收者super.onCreate();//创建一个广播接收者sReceiver = new ScreenReceiver();//指定接收那种类型的广播IntentFilter filter = new IntentFilter();//指定关屏幕和开屏幕filter.addAction(Intent.ACTION_SCREEN_OFF);filter.addAction(Intent.ACTION_SCREEN_ON);//注册广播接收者registerReceiver(sReceiver, filter);Log.i("ScreenService", "广播接受者已注册");}@Overridepublic void onDestroy() {// 销毁广播接收者super.onDestroy();unregisterReceiver(sReceiver);Log.i("ScreenService", "广播接受者已销毁");}}在Service的onCreate方法中注册广播接收者,在Destory方法中销毁广播接收者
最终广播接收者的代码:
public class ScreenReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(Intent.ACTION_SCREEN_OFF.equals(action)){//接收到管屏幕的广播Log.i("ScreenReceiver", "屏幕关闭!");}else if(Intent.ACTION_SCREEN_ON.equals(action)){//接收到开屏幕的广播Log.i("ScreenReceiver", "屏幕开启!");}}}
清单文件中,需要要配置服务,广播接收者不需要配置
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.demo.screenactivity.ScreenService"></service> </application>运行效果如下:
ok。 就到这里,大家了解下就行
0 0
- Android 四大组件学习之BroadcastReceiver四
- android学习笔记之四:四大组件之BroadcastReceiver
- Android学习之四大组件(四)——BroadcastReceiver
- Android学习笔记--四大组件之BroadcastReceiver
- Android 四大组件学习之BroadcastReceiver一
- Android 四大组件学习之BroadcastReceiver二
- Android 四大组件学习之BroadcastReceiver三
- Android 四大组件学习之 BroadcastReceiver
- Android学习笔记四大组件之BroadcastReceiver
- Android学习之路--四大组件--BroadCastReceiver
- Android四大组件学习之BroadcastReceiver
- Android 初始篇四 Android 四大组件之BroadcastReceiver
- android四大组件之BroadCastReceiver
- android 四大组件之 broadcastreceiver
- android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Android四大组件之BroadcastReceiver
- Java 设计模式—装饰者模式
- 浅析嵌入式C优化技巧
- Uva 12436 Rip Van Winkle's Code
- Javascript MVC 学习笔记(三) 视图和模板
- JavaEE基础---java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
- Android 四大组件学习之BroadcastReceiver四
- zoj1334
- 基于NVIDIA显卡的硬编解码
- hdoj 1002A + B Problem II
- 机房重构-封装模块
- windows 下 redis 安装
- 八大排序-快速排序
- UVA 10878
- UVA 156 Ananagrams