在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver
活动(Activity) - 用于表现功能
服务(Service) - 相当于后台运行的 Activity
广播(Broadcast) - 用于发送广播
广播接收器(BroadcastReceiver) - 用于接收广播
Intent - 用于连接以上各个组件,并在其间传递消息
Android中的广播事件有两种,一种就是系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。
另外一种是我们自定义的广播事件。
注册BroadcastReceiver有两种方式:
一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。
另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消时就调用 Context.unregisterReceiver()方法。
如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)
发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。
同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。
广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。
通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等
MainActivity.java:
package com.demo.broadcast; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; /** * @ClassName: MainActivity * @Description: Broadcast测试demo * @author chenzheng * @date 2014-9-4 上午10:15:05 */ public class MainActivity extends Activity implements OnClickListener{ private Button sendStaticBtn; private Button sendDynamicBtn; private static final String STATICACTION = "com.demo.broadcast.static"; private static final String DYNAMICACTION = "com.demo.broadcast.dynamic"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendStaticBtn = (Button) findViewById(R.id.send_static); sendDynamicBtn = (Button) findViewById(R.id.send_dynamic); sendStaticBtn.setOnClickListener(this); sendDynamicBtn.setOnClickListener(this); } @Override protected void onStart() { super.onStart(); Log.e("MainActivity", "注册广播事件"); // 注册自定义动态广播消息 IntentFilter filter_dynamic = new IntentFilter(); filter_dynamic.addAction(DYNAMICACTION); registerReceiver(dynamicReceiver, filter_dynamic); } private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.e("MainActivity", "接收自定义动态注册广播消息"); if(intent.getAction().equals(DYNAMICACTION)){ String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } } }; @Override public void onClick(View v) { switch (v.getId()) { case R.id.send_static: Log.e("MainActivity", "发送自定义静态注册广播消息"); Intent intent1 = new Intent(); intent1.setAction(STATICACTION); intent1.putExtra("msg", "接收静态注册广播成功!"); sendBroadcast(intent1); break; case R.id.send_dynamic: Log.e("MainActivity", "发送自定义动态注册广播消息"); Intent intent2 = new Intent(); intent2.setAction(DYNAMICACTION); intent2.putExtra("msg", "接收动态注册广播成功!"); sendBroadcast(intent2); break; default: break; } } }
StaticReceiver.java:
package com.demo.broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; /** * @ClassName: StaticReceiver * @Description: 自定义静态注册广播消息接收器 * @author chenzheng * @date 2014-9-4 上午11:09:53 */ public class StaticReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("MainActivity", "接收自定义动态注册广播消息"); String msg = intent.getStringExtra("msg"); Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo.broadcast" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <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> <!-- 注册自定义静态广播接收器 --> <receiver android:name=".StaticReceiver" > <intent-filter> <action android:name="com.demo.broadcast.static" /> </intent-filter> </receiver> <!-- 注册系统静态广播接收器 --> <receiver android:name=".SystemReceiver" > <intent-filter> <action android:name="android.intent.action.BATTERY_LOW" /> </intent-filter> </receiver> </application> </manifest>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="hello" /> <Button android:id="@+id/send_static" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送自定义静态注册广播" /> <Button android:id="@+id/send_dynamic" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送自定义动态注册广播" /> </LinearLayout>
相关推荐
本实践项目"Android学习之Broadcast练习_dlc"旨在帮助开发者深入理解和熟练掌握Broadcast的相关知识。 首先,我们要了解Broadcast的基本概念。Broadcast分为系统广播和自定义广播。系统广播是由系统发出的,例如...
Android学习之Broadcast的简单使用 Android学习之Broadcast的简单使用是Android开发中一个非常重要的知识点。Broadcast是Android系统的一种消息机制,允许应用程序之间进行通信和交互。今天,我们将详细介绍如何...
在这个“Android学习-broadcast实现音乐播放器”的项目中,我们将探讨如何利用BroadcastReceiver来构建一个简单的音乐播放器。BroadcastReceiver是Android系统中的一个关键组件,它监听并响应系统或应用发布的广播...
在Android系统中,Broadcast(广播)和Intent是两个至关重要的组件,它们构成了应用程序间通信的基础。Broadcast用于在应用程序之间...对于初学者来说,深入学习和实践这两个概念,将为后续的Android开发奠定坚实基础。
这是Pro Android学习系列中Broadcast部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
1. **BroadcastReceiver**: 它是Android四大组件之一,用于接收系统或自定义广播事件。当特定事件发生时,BroadcastReceiver会触发,并执行相应的逻辑。在这个例子中,我们关注的是网络状态改变的广播。 2. **注册...
这样的示例有助于Android开发者学习如何实现在移动设备之间进行实时、无连接的通信。通过实践和理解这些知识点,开发者可以创建出能够利用UDP广播功能的应用,例如局域网内的即时通讯、设备发现等。
解压“Android应用源码之broadcast_broadcast”后,你可以通过阅读和分析代码来学习BroadcastReceiver的使用方法,了解如何创建、注册、发送广播,以及如何处理接收到的广播。此外,还可以研究如何在服务(Service)...
在Android系统中,广播(Broadcast)是一种非常重要的组件,它允许应用程序之间进行异步通信,即使这些应用在后台运行或完全未启动。BroadcastReceiver是处理广播的核心类,它监听并响应系统或应用发送的广播意图...
在这个Android_UDPBroadcast_Demo中,我们将深入探讨如何在Android设备上进行UDP广播的收发。 首先,要实现UDP广播,我们需要使用Java的`java.net.DatagramSocket`类来创建一个UDP套接字。这个套接字可以用于发送和...
本学习资料主要围绕“android-broadcast”这一主题,适合初学者入门。以下是对Android广播机制及其应用的详细阐述。 一、BroadcastReceiver基本概念 BroadcastReceiver是一个抽象类,用于接收系统或应用广播事件。...
广播机制在Android中之所以不可或缺,是因为它实现了发送者和接收者的松耦合。发送广播的应用不需要知道哪些应用或组件会接收到广播,而接收广播的组件也不需要预先知道广播的来源。这种设计使得系统能够动态响应...
### Android学习资源与知识点概述 在当今移动互联网时代,Android操作系统作为全球最广泛使用的移动设备平台之一,其重要性不言而喻。对于开发者而言,掌握Android开发技能不仅能够提升个人职业竞争力,还能够为...
通过分析这个"Android应用源码之broadcast.zip"中的源码,开发者可以深入理解BroadcastReceiver的工作原理,学习如何在实际项目中有效地使用广播进行组件间的通信。这种能力对于构建健壮、高效的Android应用至关重要...
- BroadcastReceiver是Android四大组件之一,用于接收系统或自定义广播事件。 - 它可以动态注册(在代码中注册,活动结束时自动注销)或静态注册(在AndroidManifest.xml中声明,即使应用后台运行也能接收到广播)...
Android应用源码之broadcast.zip项目安卓应用源码下载Android应用源码之broadcast.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Broadcast1.zip这个压缩包很可能包含了与Android广播接收器相关的源代码示例,帮助开发者理解和学习如何在实际项目中使用广播。 首先,我们要理解Android广播的基本概念。在Android系统中,Broadcast Intent(广播...
在Android系统中,Broadcast(广播)是一种全局的消息传递机制,它允许应用程序之间进行异步...通过Broadcast Demo项目的学习,开发者能够熟练掌握Android中Broadcast的基本使用,为实现更复杂的跨组件通信打下基础。
在安卓(Android)系统中,Broadcast(广播)是一种重要的组件,用于在整个系统中发送和接收消息。Broadcast Intent(广播意图)是实现这一功能的核心工具,它允许应用在无需直接交互的情况下进行通信。当我们谈论...
在Android系统中,广播(Broadcast)是一种非常重要的组件,它使得应用程序之间能够进行无接触的信息传递,即使这些应用并未在运行。"android Broadcast"这个标题指的是Android中的广播机制,它是Android系统事件...