注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

Broadcast Receiver 使用入门  

2011-07-22 11:00:56|  分类: 编程之美 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本讲内容: Broadcast Receiver 的使用
1、Broadcast Receiver简介
2、Broadcast Receiver接收系统自带的广播
3、自定义广播

一、Broadcast Receiver简介

Android中的四大组件是 Activity、Service、Broadcast和Content Provider。而Intent是一个对动作和行为的抽象描述,负责组件之间程序之间进行消息传递。那么Broadcast Receiver组件就提供了一种把Intent作为一个消息广播出去,由所有对其感兴趣的程序对其作出反应的机制。

二、Broadcast Receiver接收系统自带的广播

我们做一个例子,功能是在系统启动时播放一首音乐。

1、建立一个项目Lesson21_BroadcastReceiver,拷贝一首音乐进res/raw目录

2、建立HelloBroadcastReceiver.java 内容如下:

01package android.basic.lesson21;
02 
03import android.content.BroadcastReceiver;
04import android.content.Context;
05import android.content.Intent;
06import android.media.MediaPlayer;
07import android.util.Log;
08 
09public class HelloBroadReciever extends BroadcastReceiver {
10 
11    //如果接收的事件发生
12    @Override
13    public void onReceive(Context context, Intent intent) {
14        //则输出日志
15        Log.e("HelloBroadReciever", "BOOT_COMPLETED!!!!!!!!!!!!!!!!!!!!!!!!!");
16        Log.e("HelloBroadReciever", ""+intent.getAction());
17 
18        //则播放一首音乐
19        MediaPlayer.create(context, R.raw.babayetu).start();
20    }
21}

3、在AndroidManifest.xml中注册此Receiver

01<?xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionname="1.0" android:versioncode="1" package="android.basic.lesson21">
03    <application android:icon="@drawable/icon" android:label="@string/app_name">
04        <activity android:label="@string/app_name" android:name=".MainBroadcastReceiver">
05            <intent -filter="">
06                <action android:name="android.intent.action.MAIN">
07                <category android:name="android.intent.category.LAUNCHER">
08            </category>
09        </action>
10    <!-- 定义Broadcast Receiver 指定监听的Action -->
11    <receiver android:name="HelloBroadReciever">
12            <intent -filter="">
13                <action android:name="android.intent.action.BOOT_COMPLETED">
14            </action>
15    </intent>
16</receiver></intent></activity></application></manifest>

4、发布程序,启动模拟器,可以在Logcat中看到:

~OY1$Y7O3}O64K{UCN_@$79

同时能听到音乐播放的声音。说明我们确实接收到了系统启动的广播事件,并做出了响应。

image

三、自定义广播

下面我们学习自己制作一个广播。我们接着刚才的例子,继续写下去。

5、在MainBroadcastReceiver.java中填写如下代码:

01package android.basic.lesson21;
02 
03import android.app.Activity;
04import android.content.Intent;
05import android.os.Bundle;
06import android.view.View;
07import android.widget.Button;
08 
09public class MainBroadcastReceiver extends Activity {
10    /** Called when the activity is first created. */
11    @Override
12    public void onCreate(Bundle savedInstanceState) {
13        super.onCreate(savedInstanceState);
14        setContentView(R.layout.main);
15 
16        Button b1 = (Button) findViewById(R.id.Button01);
17 
18        b1.setOnClickListener(new View.OnClickListener() {
19 
20            @Override
21            public void onClick(View v) {
22                //定义一个intent
23                Intent intent = new Intent().setAction(
24                        "android.basic.lesson21.Hello").putExtra("yaoyao",
25                        "yaoyao is 189 days old ,27 weeks -- 2010-08-10");
26                //广播出去
27                sendBroadcast(intent);
28            }
29        });
30    }
31}

6、更改 HelloBroadReceiver.java 内容如下:

01package android.basic.lesson21;
02 
03import android.content.BroadcastReceiver;
04import android.content.Context;
05import android.content.Intent;
06import android.media.MediaPlayer;
07import android.util.Log;
08 
09public class HelloBroadReciever extends BroadcastReceiver {
10 
11    //如果接收的事件发生
12    @Override
13    public void onReceive(Context context, Intent intent) {
14        //对比Action决定输出什么信息
15        if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
16            Log.e("HelloBroadReciever", "BOOT_COMPLETED !!!!!!!!!!!!!!!!!!!!!!!!!");
17        }
18 
19        if(intent.getAction().equals("android.basic.lesson21.Hello")){
20            Log.e("HelloBroadReciever", "Say Hello to Yaoyao !!!!!!!!!!!!!!!!!!!!!!!!!");
21            Log.e("HelloBroadReciever", intent.getStringExtra("yaoyao"));
22        }
23 
24        //播放一首音乐
25        MediaPlayer.create(context, R.raw.babayetu).start();
26    }
27}

7、更改 AndroidManifest.xml 内容如下:

01<?xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.basic.lesson21" android:versionname="1.0" android:versioncode="1">
03    <application android:icon="@drawable/icon" android:label="@string/app_name">
04        <activity android:label="@string/app_name" android:name=".MainBroadcastReceiver">
05            <intent -filter="">
06                <action android:name="android.intent.action.MAIN">
07                <category android:name="android.intent.category.LAUNCHER">
08            </category>
09        </action>
10    <!-- 定义Broadcast Receiver 指定监听的Action 这里我们的接收器,接收了2个Action,一个系统的一个我们自定义的  -->
11    <receiver android:name="HelloBroadReciever">
12            <intent -filter="">
13                <action android:name="android.intent.action.BOOT_COMPLETED">
14            </action>
15            <intent -filter="">
16                <action android:name="android.basic.lesson21.HelloYaoYao">
17            </action>
18 
19    </intent>
20</intent>
21<uses -sdk="" android:minsdkversion="8">
22</uses> </receiver></intent></activity></application></manifest>

8、运行程序,点击按钮,查看LogCat,听听声音

image

3@({Q[{{(E1EA7UQTZ[TDGK

  评论这张
 
阅读(1043)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018