本节学习系统中特殊的广播接收者。

我们前面几节不是说了,当广播接受者一旦注冊到系统中,当系统发送的广播和你注冊的广播的action匹配时,系统就会启动广播接收者所在的进程。除非用户手动停止广播接收者所在的进程。但是生活中有这样一种情况,比方说:我在玩网络游戏,如果说游戏本身在系统电量低的情况下,会自己主动保存当前游戏的进度。也就是存档的。能够这么说。此广播接受者仅仅有在用户玩游戏时才须要启动,别的时候用户是不须要的。

如果此广播接收者一直常驻于系统。那不是非常浪费系统资源。

所以我们就须要动态的启动广播接收者。和停止广播接收者。但是大家知道。广播接收者仅仅要在清单文件里注冊过了的,就会永远启动的。

所以唯一的办法就是不在清单文件里注冊,在代码中动态注冊。

说了这么多。就是说能够用代码动态的注冊广播接收者。

说到在代码中注冊广播接收者,那Android系统中规定。屏幕锁屏和解锁,以及电量改变必须用代码注冊。在清单文件里注冊是不起作用的。那是由于,屏幕锁屏和解锁,以及电量改变事件太频繁发生了。假设在清单文件里注冊,将会对系统消耗非常大。

那我们就用屏幕解锁和锁屏实现代码中注冊广播接收者

这次我们用服务去创建广播接收者

Activity的代码:也就是两个button。一个用于创建创建服务。一个用于停止服务

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;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} @Override
public 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", "广播接受者已注冊");
} @Override
public void onDestroy() {
// 销毁广播接收者
super.onDestroy();
unregisterReceiver(sReceiver);
Log.i("ScreenService", "广播接受者已销毁");
}
}

在Service的onCreate方法中注冊广播接收者。在Destory方法中销毁广播接收者

终于广播接收者的代码:

public class ScreenReceiver extends BroadcastReceiver {

	@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String 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>

执行效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

ok。 就到这里。大家了解下即可

Android 四大组件学习之BroadcastReceiver四的更多相关文章

  1. Android 四大组件学习之BroadcastReceiver一

    本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...

  2. Android 四大组件学习之BroadcastReceiver三

    本节学习广播的分类. 广播分为无序广播和有序广播 无序广播: 广播发送者的action与广播接收者的action都匹配的话,所以广播介绍者都能够收到这条广播,而且没有先后顺序,能够觉得是同一时候收到 ...

  3. Android 四大组件学习之BroadcastReceiver二

    上节学习了怎样创建一个广播.也尝试接受系统打电话的广播. 本节课学习怎样自己定义广播.自己定义广播实质上也就是创建一个发送广播者,创建一个接受该广播者. 那我们就開始行动吧. 先创建一个发送广播的应用 ...

  4. Android 四大组件学习之ContentProvider四

    上节我们学习了怎样去读取系统短信以及插入一条短信到系统中. 本节我们学习怎样获取系统的联系人,以及插入一条联系人 好.废话不多说了,直接操作. 首先和读取短信一样,先找到联系人在数据库中的位置. wa ...

  5. Android 四大组件学习之Server一

    上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...

  6. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  7. Android四大组件之一:BroadCastReceiver(广播接收者)

    广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开 ...

  8. Android 四大组件学习之ContentProvider二

    上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是 ...

  9. android四大组件学习总结以及各个组件示例(2)

    上篇博文讲解了activity.content provider,此篇博文来仔细总结service.broadcast receiver: 3. Service >什么是服务?>windo ...

随机推荐

  1. 写一个类似淘宝的ios app需要用到哪些技术?

    写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...

  2. UVA-1335(UVALive-3177) Beijing Guards 贪心 二分

    题面 题意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人 ...

  3. 读入图片显示scipy.misc module has no attribute imread?

    >>> import scipy >>> scipy.misc <module 'scipy.misc' from 'C:\Python27\lib\site ...

  4. E - Dividing Orange

    Problem description One day Ms Swan bought an orange in a shop. The orange consisted of n·k segments ...

  5. ADO.NET增删改

    static void Main1(string[] args) {添加造连接字符串string connstring = "server=.;database=mydb;user=sa;p ...

  6. 文档控件NTKO OFFICE 详细使用说明之预览word编辑保存回服务器

    1.在线预览Word文件 (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将www.ntko.com加入到浏览 ...

  7. Fragment_动态加载

    1.新建Fragment的XML布局文件. 2.在activity.xml中添加需要加载Fragment.列如: <?xml version="1.0" encoding=& ...

  8. WP 图片加载时显示加载中

    private BitmapImage srcimage = new BitmapImage(); public MainPage() { InitializeComponent(); progres ...

  9. Struts2学习笔记 - Part.02

    ================Struts2的国际化================程序国际化: 程序可以根据极其所在的国家.语言环境,自动显示当前国家.语言的内容国际化的本质是:查找.替换国际化的 ...

  10. (转)RabbitMQ学习之Headers交换类型(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40923131 Headers类型的exchange使用的比较少,它也是忽略routingKey的一 ...