Android 之 BroadcaseReceiver

1.在AndroidManifest.xml中注册


<receiver android:name=".MyReceiver">
<intent-filter >
<action android:name="myaction"/>
</intent-filter>
</receiver>

2.在Activity中注册


MyReceiver receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("myaction");
registerReceiver(receiver, filter);

两种注册BroadcastReceiver方法的比较:
现在我们了解了两种注册BroadcastReceiver的方法之后,需要考虑一下这两种方法适用的场合:

i.
第一种注册的方法可以保证在应用程序安装之后,BroadcastReceiver始终处于活动状态,通常用于监听系统状态的改变,比如说手机的电量,wifi网卡的状态(当然,监视这些东西也是取决于软件的需求)。对于这样的BroadcastReceiver,通常是在产生某个特定的系统事件之后,进行相应的操作,比如说wifi网卡打开时,给用户一个提示;

ii.
第二种注册方法相对第一种要灵活的多,这样注册的BroadcastReceiver通常用于更新UI的状态。一般来说,都是在一个Activity启动的时候使用这样的方法注册BroadcastReceiver,一旦接收到广播的事件,就可以在onReceive方法当中更新当前的这个Activity当中的控件。但是需要注意的是如果这个Activity不可见了,就应该调用unregisterReceiver方法来解除注册;

函数:

i.
registerReceiver(receiver,filter);
这个函数的作用就是将一个BroadcastReceiver注册到应用程序当中,这个函数接收两个参数,第一个参数是需要注册的BroadcastReceiver对象,第二个是一个IntentFilter。第一个参数是非常容易理解的,第二个参数的作用是定义了哪些Intent才能触发这个注册的BroadcastReceiver对象。类似于前面所讲解的
<intent-filter>标签的作用;

ii.
unregisterReceiver(receiver);
这个方法就非常的简单了,用于解除BroadcastReceiver的绑定状态。一旦解除完成,响应的BroadcastReceiver就不会再接收系统所广播的Intent了。

下面是源代码Demo:

Acitivity:


package com.example.broadcast;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

Button mybt;
Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mybt = (Button)findViewById(R.id.mybt);
mybt.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

/*注册BroadcastReceiver有两种方式:
一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。
另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,
如果取消时就调用 Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,
BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)*/
// MyReceiver receiver = new MyReceiver();
// IntentFilter filter = new IntentFilter();
// filter.addAction("myaction");
// registerReceiver(receiver, filter);
//创建Intent对象
intent = new Intent();
//设置Intent的Action属性
intent.setAction("myaction");
//加入信息
intent.putExtra("msg", "普通广播");
//传送信息
sendBroadcast(intent);

}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

BroadcastReceiver:


package com.example.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(context,"Action is:"+intent.getAction()
+"\n msg is:"+intent.getStringExtra("msg") , Toast.LENGTH_LONG)
.show();
}

}

Service发送广播:


Intent intent = new Intent();
intent.setAction("com.he.chat.receiveNewMessage");//创建过滤条件
intent.putExtra("key", "newMessage");//传递参数
intent.putExtra("sender", msg.getSender());//传递参数
sendBroadcast(intent);

Manifest:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcast"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".MyReceiver">
<intent-filter >
<action android:name="myaction"/>
</intent-filter>
</receiver>
<activity
android:name="com.example.broadcast.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>
</application>

</manifest>

Android 之 BroadcaseReceiver

时间: 2024-08-28 16:29:55

Android 之 BroadcaseReceiver的相关文章

Android基础笔记(一)

1G - 5G的介绍 Android的操作系统的介绍 Android版本 Android系统的架构 两种虚拟机的不同 ART模式 模拟器的简介 SDK目录 Android工程目录结构 打包的过程 ADB常用指令 案例电话拨号器 四种点击事件 Android的常用布局 Andriod中的单位 1G - 5G的介绍 1st - Generation 代表作是:大哥大,只能进行语音通信,不能够发短信.更不能上网. 2nd - Generation 代表作是:小灵通,可以收发短信.可以上网,但是速度几十

Android面试常规问答

  1. Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑 service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口 Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Con

android学习四---Activity和Intent

1.android项目资源深入了解 在深入学习android之前,先好好玩玩手机上的应用,大部分程序都有一个图标,点开图标,程序启动,一定时间后,程序会跳转到第一个界面,比如手机QQ,点开图标,会跳出一幅图,接着就跳到QQ登陆的界面(如下图).这个界面里有输入框输入QQ号码,密码,有个登陆按钮,有记住密码选择框,还有一些图标和文本.如果你输入了密码和账号后,点击登陆,程序就会响应.发送到服务器端会检查账号,密码.账号密码一致的话就会就会跳到用户界面. 假设需要实现这样的一个界面,对应的andro

Android 面试题(转)

转自:http://www.jobui.com/mianshiti/it/android/2682/ 1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.2.sim卡的EF 文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统

(转)Android面试题

1.  下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存  C.内存回收程序允许程序员直接释放内存  D.内存回收程序可以在指定的时间释放内存对象  2.  下面异常是属于Runtime Exception 的是(abcd)(多选) A.ArithmeticException B.IllegalArgumentException C.NullPointerException D.BufferUnderflowExcept

Android Wi-Fi Peer-to-Peer(Android的Wi-Fi P2P对等网络)

Wi-Fi peer-to-peer(P2P,对等网络),它同意具备对应硬件的Android 4.0(API level 14)或者更高版本号的设备能够直接通过wifi而不须要其他中间中转节点就能直接通信(Android的Wi-Fi P2P框架符合Wi-Fi联盟的Wi-Fi Direct?直连认证标志).使用这些API.你能够搜索并连接其他相同支持Wi-Fi P2P的设备,然后再通过一个快速的连接进行互相通信,而且这个连接的有效距离要比蓝牙连接的有效距离要长的多. 这对于须要在用户之间共享数据的

Android面试题目2

1. 请描述下Activity的声明周期. onCreate->onStart->onRemuse->onPause->onStop->onRestart->onDestroy 2. 如果后台的Activity由于某种原因被系统回收,如何在回收之前保存当前状态.onSaveInstanceState().程序中的某一个Activity A 在运行时,主动或被动的运行另一个新的Activity B,这个时候A会执行onSaveInstanceState().B完成以后又回

Intent应用详解-Android开发

一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互.因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关

Android面试题集锦 (转)

转自:http://xiechengfa.iteye.com/blog/1044721 一些常见的Android面试基础题做下总结,看看你能做出多少道? 1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗? 这里Android123提示大家,Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT .FLAG_ACTIVITY_CLEAR_TOP.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET.FLAG_ACTIVI