Android组件之BroadCast简单实践

简介:

作为Android的四大组件之一,没有理由不介绍一下BroadCast,BroadCast中文简单翻译就是广播,前阵子浙江某大学的啦啦操,广场舞的大妈,其中大妈和学生从喇叭和音响上听到的声音就是事件源,接收者就是这些大妈和学生,程序源自实践,Android中BroadCast,有事件广播者也有事件接收者,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件,也就是接收者。讲完了基本的概念,可以开始基本的实践:

自定义广播的两种实现方式

两种实现方式,一种是静态,一种是动态,先看下静态的实现过程:

定义一个BookBroadCast接收者(有几个判断添加是系统广播需要的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  class  BookBroadCast  extends  BroadcastReceiver {
 
     private  String tag =  "BookBroadCast" ;
 
     @Override
     public  void  onReceive(Context context, Intent intent) {
         // TODO Auto-generated method stub
         String actionString = intent.getAction();
         String name = intent.getStringExtra( "Name" );
         if  (actionString.equals(Intent.ACTION_TIME_CHANGED)) {
             Log.i(tag,  "Name:"  + name +  "--Action:"  + actionString
                     "--哥们,时间改变了~" );
         else  if  (actionString.equals(Intent.ACTION_BATTERY_CHANGED)) {
             Log.i(tag,  "Name:"  + name +  "--Action:"  + actionString
                     "--哥们,电量变了~" );
         else  {
             Log.i(tag,  "Name:"  + name +  "--Action:"  + actionString);
         }
     }
 
}

  看下App页面:

 

 

静态广播对应第一个按钮,点击事件:

1
2
3
Intent intent =  new  Intent( "com.google.broadcast.BookBroadCast.static" );
         intent.putExtra( "Name" "静态广播" );
         sendBroadcast(intent);

  静态广播需要在AndroidManifest.xml中注册一下:

1
2
3
4
5
6
7
<receiver android:name= "com.google.broadcast.BookBroadCast" >
          <intent-filter >
              <action android:name= "com.google.broadcast.BookBroadCast.static" />
                 <action android:name= "android.intent.action.TIME_SET" />
          </intent-filter>
      </receiver>

  结果如下:

动态调用就是不需要在AndroidManifest.xml注册,在程序中动态生成filter设置action,在activity中的onStart注册,onStop终止:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
protected  void  onStop() {
     // TODO Auto-generated method stub
     super .onStop();
     unregisterReceiver(bookReceiver);
}
 
@Override
protected  void  onStart() {
     // TODO Auto-generated method stub
     super .onStart();
     IntentFilter intentFilter =  new  IntentFilter();
     intentFilter.addAction( "com.google.broadcast.BookBroadCast.dymanic" );
     bookReceiver =  new  BookBroadCast();
     registerReceiver(bookReceiver, intentFilter);
 
}

  动态调用事件,对应第二个按钮:

1
2
3
Intent dintent =  new  Intent( "com.google.broadcast.BookBroadCast.dymanic" );
         dintent.putExtra( "Name" "动态广播" );
         sendBroadcast(dintent);

  结果如下:

两种系统广播调用方式

关于系统广播的各种事件网上一找一堆,我就没必要贴在这里了,先来实现第三个和第四个按钮的事件,第三个是系统事件的改变,第四个是电池电量的改变:

第三个action的常量的和Intent枚举出来的名称有出入:

1
<action android:name= "android.intent.action.TIME_SET" />

  调用的时候是这样的:

1
2
3
Intent sintent =  new  Intent(Intent.ACTION_TIME_CHANGED);
         sintent.putExtra( "Name" "不被保护系统广播" );
         sendBroadcast(sintent);

  结果如下:

这个其实都没有什么大的问题,然后按照静态注册方式没法搞定第四个电池电量的问题,先来看第四个是如何实现的:

1
2
3
IntentFilter systemintentFilter =  new  IntentFilter(Intent.ACTION_BATTERY_CHANGED);
         systembookReceiver =  new  BookBroadCast();
         registerReceiver(systembookReceiver, systemintentFilter);

 首先可以看出不是静态注册的,需要动态注册,然后不需要调用sendBroadcast,结果如下:

这个问题解决都弄了一个多小时,最终的Google的API找到对应的解释:

地址:http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4083288.html,如需转载请自行联系原作者

相关文章
|
4天前
|
安全 数据处理 Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第26天】 在面对现代Android开发时,性能优化和流畅的用户体验成为了开发者们追求的目标。Kotlin作为一种现代化的编程语言,通过其协程特性为Android应用带来了前所未有的并发处理能力。本文将深入探讨如何利用Kotlin协程提升Android应用的响应性和效率,同时保持代码的简洁性。我们将从协程的基础概念出发,逐步揭示如何在实际应用中运用这些强大的工具,以及它们如何改善应用架构和用户交互体验。
|
8天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第22天】 在移动开发领域,性能优化和响应性是衡量应用程序质量的关键指标。近年来,Kotlin语言因其简洁性和功能性在Android社区中获得了广泛认可。特别是Kotlin协程,作为一种新的并发处理机制,正在改变开发者编写异步和后台任务的方式。本文将探讨Kotlin协程的核心优势,并通过实例展示如何在Android应用中实现它们以提高性能和用户体验。
|
10天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
10天前
|
API 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优化实践
【4月更文挑战第20天】 在现代Android开发中,Kotlin协程以其轻量级线程管理和非阻塞I/O操作的优势成为提升应用性能和响应性的重要工具。本文深入分析Kotlin协程的核心原理,探讨其在Android平台上实现高效并发编程的方法,并通过具体实例演示如何利用协程改进应用架构。我们将从协程的基本概念出发,逐步解析其与线程、回调和异步任务的关系,最终展示如何通过协程简化代码结构,提高运行效率,并确保用户界面的流畅性。
21 11
|
1天前
|
移动开发 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优化实践
【4月更文挑战第29天】在移动开发领域,尤其是Android平台上,性能优化一直是开发者关注的重点。近年来,Kotlin语言凭借其简洁性和功能性成为Android开发的热门选择。其中,Kotlin协程作为一种轻量级的并发处理机制,为编写异步代码、网络请求和数据库操作提供了极大的便利。本文将深入探讨Kotlin协程在Android应用中的性能优化技巧,帮助开发者构建更加高效的应用程序。
|
2天前
|
API 调度 Android开发
构建高效Android应用:Kotlin协程的实践之路
【4月更文挑战第28天】随着移动应用开发的不断深入,开发者们追求更高效的编码方式和性能优化。Kotlin作为一种现代的编程语言,其协程特性提供了异步编程的新范式,使得处理并发任务更加简洁高效。本文将探讨如何在Android应用开发中利用Kotlin协程提升性能和用户体验,同时确保代码的可读性和可维护性。通过实例分析和代码演示,我们将深入了解协程在Android中的实际应用及其带来的优势。
7 1
|
2天前
|
移动开发 调度 Android开发
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第28天】 在移动开发领域,尤其是针对Android平台,性能优化和异步处理一直是开发者关注的焦点。随着Kotlin语言的普及,其提供的协程功能已经成为处理异步任务的强大工具。本文将深入探讨Kotlin协程在Android应用开发中的优势,并通过实例展示如何利用协程提升应用性能和响应能力。我们将分析协程与传统线程和AsyncTask的对比,以及如何在实际项目中有效集成和调试协程。
|
6天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第24天】随着移动开发技术的不断演进,提升应用性能和用户体验已成为开发者的核心任务。在Android平台上,Kotlin语言凭借其简洁性和功能性成为主流选择之一。特别是Kotlin的协程功能,它为异步编程提供了一种轻量级的解决方案,使得处理并发任务更加高效和简洁。本文将深入探讨Kotlin协程在Android开发中的应用,通过实际案例分析协程如何优化应用性能,以及如何在项目中实现协程。
|
8天前
|
Java 数据库 Android开发
构建高效Android应用:探究Kotlin协程的优化实践
【4月更文挑战第22天】 随着移动开发技术的不断进步,Android平台上的性能优化已成为开发者们关注的焦点。在众多优化手段中,Kotlin协程以其轻量级线程管理和异步编程的优势,为提高应用性能和响应性提供了新的思路。本文将深入探讨Kotlin协程在Android开发中的具体应用,通过实例演示如何利用协程进行网络请求、数据库操作和UI线程的非阻塞更新,以期达到提升应用性能的目的。
12 2
|
9天前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
14 0