- 浏览: 297656 次
- 性别:
- 来自: 上海
最新评论
-
再_见孙悟空:
写的不错
Dialog -
a549262189:
支持下,正好在学习这块的内容!
Android Gesture Detector -
dcsff:
受教了
LayoutInflater -
庆_啊:
真厉害。
LayoutInflater -
ghj234:
学习了,哈哈
LayoutInflater
Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最 典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。
通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。
1. 我们自己的程序主动广播Intent
final String BROADCAST = "com.forrest.action.mybroadcast"; Intent intent = new Intent(BROADCAST); // 对应setAction() intent.putExtra("data_title", "来短信啦"); intent.putExtra("data_text", "美女你好,晚上可有空"); sendBroadcast(intent);
2.接收广播
接收broadcast需要注册一个Broadcast Receiver,并且要注册一个Intent Filter来制定Broadcase Receiver是对哪些Intent进行监听。
(1)注册Broadcast Receiver
一个Broadcast receiver只有一个简单的回调函数:onReceive(Context curContext, Intent broadcastMsg),当一个广播消息被Receiver监听到时,Android会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则android会弹出超时dialog。 此时是否另开一个线程来处理耗时的操作呢?
Receiver只在onReceive方法执行时是激活状态,只要onReceive一返回,Receiver就不再是激活状态了。Receiver进程是被一个激活状态的broadcast receiver所保护而不被系统终止的,一旦onReceive返回,Receiver进程broadcast receiver所保护而变为一个空进程,空进程是可以在任意时刻被终止的。这就带来了一个问题:当响应一个广播信息的处理十分耗时的时候,那么就应该把这个处理放在一个单独的线程里去执行,来保证主线程里的其他用户交互组件能够继续运行,而一旦这么做,当onReceive()唤起一个线程后就会马上返回,这时就会把Receiver进程放到被终止的境地。解决这个问题的方案是在onReceive()里开始一个Service,让这个Service去做这件事情,那么系统就会认为这个进程里还有活动正在进行。
(2)注册/注销Broadcast Receiver
1)在AndroidManifest.xml中注册
<receiver android:name="Receiver1"> <intent-filter> <!-- 和Intent中的action对应 --> <action android:name="com.forrest.action.mybroadcast"/> </intent-filter> </receiver>
2)在代码中注册
IntentFilter filter = new IntentFilter("com.forrest.action.mybroadcast"); // 和广播中Intent的action对应 MyBroadcastReceiver br = new MyBroadcastReceiver(); registerReceiver(new MyBroadcastReceiver(), filter);
3)注销
unregisterReceiver(br);
3. 示例代码
public class Receiver1 extends BroadcastReceiver { private Context context; public static final int NOTIFICATION_ID = 10001; public void onReceive(Context context, Intent intent) { this.context = context; showNotification(); } private void showNotification() { Notification notification = new Notification(R.drawable.icon, "来电话啦...", System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); notification.setLatestEventInfo(context, "来电话啦...嘿嘿", "赶紧接电话,否则误大事了", contentIntent); NotificationManager notificationManager = (NotificationManager) context.getSystemService( android.content.Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, notification); } }
public class Receiver2 extends BroadcastReceiver { private Context context; @Override public void onReceive(Context context, Intent intent) { this.context = context; deleteNotification(); } private void deleteNotification() { NotificationManager notificationManager = (NotificationManager) context.getSystemService(android.content.Context.NOTIFICATION_SERVICE); notificationManager.cancel(Receiver1.NOTIFICATION_ID); } }
public class MainActivity extends Activity { private final String ACTION_SEND = "com.forrest.action.SENDMESSAGE", ACTION_CLEAR = "com.forrest.action.CLEARNOTIFICATION"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ( (Button) findViewById(R.id.btn1) ).setOnClickListener(new OnClickListener() { public void onClick(View v) { clickMenuItem(ACTION_SEND); } }); ( (Button) findViewById(R.id.btn2) ).setOnClickListener(new OnClickListener() { public void onClick(View v) { clickMenuItem(ACTION_CLEAR); } }); } private void clickMenuItem(final String action) { Intent intent = new Intent(action); sendBroadcast(intent); } }
注册Broadcast Reciver
<application android:icon="@drawable/icon" 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="Receiver1"> <intent-filter> <action android:name="com.forrest.action.SENDMESSAGE"/> </intent-filter> </receiver> <receiver android:name="Receiver2"> <intent-filter> <action android:name="com.forrest.action.CLEARNOTIFICATION"/> </intent-filter> </receiver> </application>
4.
评论
后来同事用启动service解决了。
在你这里我找到原因。多谢。
<action android:name="com.forrest.action.SENDMESSAGE"/>
这个里面的名字是自己取的,还是系统提供的啊?
发表评论
-
如果在Eclipse中debug
2010-05-02 14:15 0最基本的操作是: 1, 首先在一个java文件中设断点,然后 ... -
How to download sourcecode of android with cygwin
2010-04-14 16:07 5107cygwin是一个在windows平台 ... -
TelephoneManager
2010-03-08 16:04 01. protected void onCreate(Bun ... -
eclipse c
2010-03-07 21:05 0Eclipse 除 了可以开发Java之外,还支持了许 ... -
android sdk安装
2010-02-02 23:37 34851.下载:http://developer.android.c ... -
google map my demo
2010-02-02 23:36 3194<uses-library android:name=& ... -
Toast
2010-02-02 23:35 14701. (1) public class ToastActi ... -
如何在MapView上画图
2010-02-02 23:34 1578http://ophone8.com/thread-4340- ... -
Service
2010-02-02 23:33 31481. Service生命周期 (1)Servic ... -
Notification
2010-02-02 23:33 19241. Notification构造器的参数 分别为: ... -
导航相关概念
2010-02-02 23:32 16951. Google Map的定位 (1)Goog ... -
PendingIntent和Intent
2010-02-02 23:28 9525Notification n = new Notificati ... -
Broadcast调用Service做的一个定时器
2010-02-02 23:28 37081. public class AlarmActivity ... -
LayoutInflater
2010-02-02 23:27 21803一般来讲,我们用LayoutInflater做一件事:infl ... -
Android's Components 生命周期
2010-02-02 23:27 2158Android中,Component(activity、ser ... -
Activity文档翻译
2010-02-02 23:26 1594转自:http://www.blogjava.net/m ... -
Intent
2010-01-20 10:51 011 public class MumActivity ex ... -
aidl
2010-01-05 11:24 30591. android进程之间如何通讯呢(在不同的进程中怎样传递 ... -
Gallery 画廊
2009-12-17 20:25 33701. images.xml <?xml ver ... -
Intent中的Flag参数
2009-12-16 18:12 6485Intent i = new Intent(B.this, C ...
相关推荐
### 四大组件详解:Activity、Service、Content Provider与Broadcast Receiver #### 一、Activity **定义:** Activity是Android应用程序中的四大基本组件之一,它代表一个屏幕界面,用户可以直接与其进行交互。每...
通过创建BroadcastReceiver,注册它,发送Broadcast,以及在接收端处理数据,我们可以轻松地在两个不同的Activity之间传递信息。注意,为了优化资源使用,记得在适当的时候注销BroadcastReceiver。
在Android开发中,四大组件是Activity、Service、Content Provider以及我们这里关注的Broadcast Receiver(广播接收器)。Broadcast Receiver是Android系统中的一个重要组成部分,它允许应用程序在后台接收并响应...
本教程将引导Android新手一步步实现Broadcast Receiver。 首先,我们需要创建一个新的BroadcastReceiver类。在Android Studio中,可以在项目结构中选择“New” -> “Java Class”,然后命名为“MyBroadcastReceiver...
广播接收者(Broadcast Receiver)是Android系统中的一个重要组件,它允许应用程序在后台接收并响应系统或应用程序广播事件。广播事件可以是系统级别的,如设备启动、网络状态改变,也可以是应用自定义的,用于在...
### Android的Broadcast Receiver应用机制 #### 一、BroadcastReceiver简介 在Android开发中,四大核心组件包括:Activity、Service、BroadcastReceiver以及Content Provider。其中,BroadcastReceiver是一种特殊...
### 第八章 Android广播事件处理Broadcast Receiver #### 知识点一:理解Broadcast Receiver的作用与意义 在Android应用开发过程中,Broadcast Receiver是一种重要的组件,它主要用于接收来自系统或其他应用程序...
<receiver android:name=".StartupBroadcastReceiver"> </receiver> ``` 3. 发送广播:在适当的时候,例如应用程序启动时,发送一个带有“com.example.START_SERVICE”动作的广播,触发BroadcastReceiver。 ...
在Android开发中,Broadcast Receiver(广播接收者)是四大组件之一,它负责监听系统或应用程序发送的广播消息,并在接收到这些消息时执行相应的操作。本项目“android-simple-broadcast-receiver-app”提供了一个...
1:使用手机号码和密码进行注册 2:使用注册信息进行登录 3:可以查看自己的记事本记录信息 4:可以添加记事本内容信息 5:可以对记事本信息进行修改和删除 6:可以查看自己的信息以及修改密码
文章目录Android四大组件之Broadcast Receiver概述广播接收器(Broadcast Receiver)Broadcast Receiver简介Broadcast Receiver的注册一. 静态注册二. 动态注册三. 本地广播发送Broadcast Receiver广播的三种发送...
下面就具体介绍一下Broadcast Receiver组件的用法。 下面是Android Doc中关于BroadcastReceiver的概述: ①广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,...
Broadcast Receiver(广播接收者)是Android四大组件之一,专门用来接收并响应系统或自定义广播事件。本教程将深入探讨Android广播的使用,适合初学者入门。 首先,我们需要了解Broadcast Receiver的基本概念。...
【时间计时器】是一款基于Android Studio开发的应用,它整合了Broadcast Receiver(广播接收者)和服务(Service)等核心组件,以实现精准的时间管理功能。在Android应用开发中,理解和掌握这些知识点至关重要,因为...
本篇文章将深入探讨Intent的分类及其在Android应用中的作用,同时也会提及Broadcast Receiver,它是Android系统中处理全局广播的重要组件。 首先,我们来看Intent的两大分类:显式Intent和隐式Intent。 1. **显式...
Broadcast Receiver(广播接收者)是Android四大组件之一,用于接收系统或应用发出的广播意图(Intent)。本实例将深入探讨如何在Android中使用`sendBroadcast`, `sendOrderedBroadcast`以及`sendStickyBroadcast`三...
在Android系统中,`testBOOT_COMPLETED` 是一个广播接收器(Broadcast Receiver)的自定义动作,用于在设备完成启动后触发特定的程序或服务。这个主题涉及到Android应用程序生命周期管理、广播接收器以及系统启动...
Broadcast_Receiver_Example 是一个基于Android平台的项目,主要展示了如何使用Broadcast Receiver这一核心组件。Broadcast Receiver(广播接收器)是Android四大组件之一,用于接收系统或应用广播事件,即使应用在...
Broadcast Receiver(广播接收者)是Android系统中用于在应用程序之间传递消息的一种机制。它允许应用在后台接收和响应系统或其它应用发送的广播事件,即使应用并未运行。本实践项目"Android学习之Broadcast练习_dlc...
这个过程涉及到Android系统的广播接收器(Broadcast Receiver)和特定的权限设置。以下是对这个主题的详细解释: 1. **Broadcast Receiver**: 在Android系统中,Broadcast Receiver是一种组件,它能监听并响应...