Android入门:广播发送者与广播接收者详细介绍

一、广播发送者&广播接收者介绍

1.广播接收者

广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写:

public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据;

广播意图就是通过Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intent intent)发送的意图,通过这个语句,能够广播给所有满足条件的组件,比如intent设置了action="com.xiazdong",则所有在AndroidManifest.xml中设置过<action Android:name="com.xiazdong"/>的广播接收者都能够接收到广播;

注:onReceive方法必须在10秒内完成,如果没有完成,则抛“Application No Response”当广播接收者onReceive方法需要执行很长时间时,最好将此耗时工作通过Intent发送给Service,由Service完成,并且不能使用子线程解决,因为BroadcastReceiver是接收到广播后才创建的,并且生命周期很短,因此子线程可能在没有执行完就已经被杀死了。

public void onReceive(Context context,Intent intent){
  Intent intent = new Intent(context,XxxService.class);
  context.startService(intent);
} 

2.广播发送者

通常广播发送方就是调用Context.sendBroadcast()的程序,而广播接收者就是继承BroadcastReceiver的程序;

通常广播发送方都是通过隐式意图,这样才能发送给多人;

广播发送方分为普通广播和有序广播;

同步广播:发送方发出后,几乎同时到达多个广播接收者处,某个接收者不能接收到广播后进行一番处理后传给下一个接收者,并且无法终止广播继续传播;Context.sendBroadcast(intent);

有序广播:广播接收者需要提前设置优先级,优先级高的先接收到广播,优先级数值为-1000~1000,在AndroidManifest.xml的<intent-filter android:priority="xxx">设置;比如存在3个广播接收者A、B、C,优先级A>B>C,因此A最先收到广播,当A收到广播后,可以向广播中添加一些数据给下一个接收者(intent.putExtra()),或者终止广播(abortBroadcast());Context.sendOrderedBroadcast(intent);

二、广播接收者核心代码

同步广播发送方核心代码:

Intent intent = new Intent();
intent.setAction("...");
Context.sendBroadcast(intent); 

有序广播发送方核心代码:

Intent intent = new Intent();
intent.setAction("...");
Context.sendOrderedBroadcast(intent,null);

广播接收者核心代码:

public class Receiver extends BroadcastReceiver{
  public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    ...
  }
} 

AndroidManifest.xml

<application>
  <receiver android:name=".Receiver">
    <intent-filter android:priority="1000">
      <action android:name="com.xiazdong"/>
    </intent-filter>
  </receiver>
</application>

三、广播实例

1.同步广播实例

场景说明:

(1)广播发送者:

package com.xiazdong.broadcastsender; 

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

public class MainActivity extends Activity {
  private Button button;
  private OnClickListener listener = new OnClickListener(){
    @Override
    public void onClick(View v) {
      Intent intent = new Intent();
      intent.setAction("com.xiazdong");
      intent.putExtra("name", "xiazdong");
      MainActivity.this.sendBroadcast(intent);
      Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();
    }
  };
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    button = (Button)this.findViewById(R.id.button);
    button.setOnClickListener(listener);
  }
}

(2)广播接收者

package com.xiazdong.broadcastreceiver1; 

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; 

public class Receiver extends BroadcastReceiver { 

  @Override
  public void onReceive(Context context, Intent intent) {
    String name = intent.getExtras().getString("name");
    Log.i("Recevier1", "接收到:"+name);
  } 

}

AndroidManifest.xml

<receiver android:name=".Receiver">
    <intent-filter>
       <action android:name="com.xiazdong"/>
    </intent-filter>
</receiver> 

结果:

2.有序广播实例

场景说明:

(1)广播发送者

package com.xiazdong.broadcastsender; 

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

public class MainActivity extends Activity {
  private Button button;
  private OnClickListener listener = new OnClickListener(){
    @Override
    public void onClick(View v) {
      Intent intent = new Intent();
      intent.setAction("com.xiazdong");
      intent.putExtra("name", "xiazdong");
      MainActivity.this.sendOrderedBroadcast(intent, null);  //有序广播发送
      Toast.makeText(getApplicationContext(), "发送广播成功", Toast.LENGTH_SHORT).show();
    }
  };
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    button = (Button)this.findViewById(R.id.button);
    button.setOnClickListener(listener);
  }
}

(2)广播接收者

Receiver1

package com.xiazdong.broadcastreceiver1; 

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; 

public class Receiver extends BroadcastReceiver { 

  @Override
  public void onReceive(Context context, Intent intent) {
    String name = intent.getExtras().getString("name");
    Log.i("Recevier1", "接收到:"+name);
    abortBroadcast();  //Receiver1接收到广播后中断广播
  } 

}

AndroidManifest.xml

<receiver android:name=".Receiver">
   <intent-filter android:priority="1000"> <!-- 设置最高优先级 -->
     <action android:name="com.xiazdong"/>
   </intent-filter>
 </receiver> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中的广播(BroadCast)详细介绍

    什么是广播 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.我们拿广播电台来做个比方.我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了.Android中的广播机制就和这个差不多的道理. 电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent.这个Intent中可以携带我们要传送的数据. 电台通过大功率的发射器发送内容,而在Androi

  • Android开发之广播机制浅析

    对于了解Android程序设计的人都知道,广播是Android开发中的一个重要的功能,在Android里面有各式各样的广播,比如:电池的状态变化.信号的强弱状态.电话的接听和短信的接收等等,今天本文就来给大家简单介绍一下系统发送.监听这些广播的机制. Android中的广播机制基本如下图所示: 那广播在Android程序中到底是如何运行的呢?下面将以代码的形式给大家好好分析一下: 一.发送广播 Intent是Activity中发送广播的桥梁,通过他我们可以轻松的将广播发送到系统中,具体的实现如下

  • Android广播接实现监听电话状态(电话的状态,拦截)

    首先我们来理解下监听器的机制. Android的事件处理机制有两种:监听和回调. A基于监听的事件处理 主要涉及三类对象:EventSource(事件源),Event(事件),EventListener(事件监听器) 监听机制处理事件的流程图如下(委派式:Delegation): 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS&q

  • Android中的广播和广播接收器代码实例

    BroadcastReceiver不仅可以接收系统广播,也可接收自定义的广播   1.定义一个广播接收器 复制代码 代码如下: public class MyReceiver extends BroadcastReceiver {          public MyReceiver()          {                    Log.i(TAG,"MyReceiver");          }                  //可用Intent的getAct

  • Android 开机广播的使用及配置

    相关文章 Android 4.0 无法接收开机广播的问题 在配置文件AndroidManifest.xml中向系统注册receiver,子节点 intent-filter 表示接收android.intent.action.BOOT_COMPLETED消息 复制代码 代码如下: <receiver android:name="com.ray.ray.receiver.BootCompletedReceiver" > <intent-filter> <act

  • Android基于广播事件机制实现简单定时提醒功能代码

    本文实例讲述了Android基于广播事件机制实现简单定时提醒功能代码.分享给大家供大家参考,具体如下: 1.Android广播事件机制 Android的广播事件处理类似于普通的事件处理.不同之处在于,后者是靠点击按钮这样的组件行为来触发,而前者是通过构建Intent对象,使用sentBroadcast()方法来发起一个系统级别的事件广播来传递信息.广播事件的接收是通过定义一个继承Broadcast Receiver的类实现的,继承该类后覆盖其onReceive()方法,在该方法中响应事件.And

  • Android广播接收机制详细介绍(附短信接收实现)

    Android中广播(BroadcastReceiver)的详细讲解. 1. BroadcastReceiver的注册过程: (1).广播消息发出来后,只有订阅了该广播的对象才会接收发出来的广播消息并做出相应处理. **(2).**Android广播分为两个方面:广播发送者和广播接收者.Android中的广播使用了观察者模式,基于消息的发布/订阅事件模型.广播接收者通过Binder机制向AMS进行注册,AMS查找符合相应条件的Broadcastreceiver,将广播发送到BroadcastRe

  • Android入门:广播发送者与广播接收者详细介绍

    一.广播发送者&广播接收者介绍 1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据: 广播意图就是通过Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intent intent)发送的意图,通过这个语

  • Android 使用jarsigner给apk签名的方法详细介绍

    Android 使用jarsigner给apk签名的方法详细介绍 工作中APP功能完成以后往往需要往应用商店提交一些内容,如商店中存在本公司别的人员提交的APP,往往需要进行认领,应用商店会让开发者下载空的APK,然后使用自己APP的签名文件进行签名,认证,这里简单说一下如何使用jarsigner命令进行签名. 该arsigner命令在jdk中可以找到, 简单说明一下具体参数: -verbose:签名命令标识符. -keystore:后面跟着的是你签名使用的密钥文件(keystore)的绝对路径

  • Android 开发音频组件(Vitamio FAQ)详细介绍

     一.Vitamio介绍 1.1 Vitamio是什么? Vitamio是Android平台视音频播放组件,支持播放几乎格式的视频以及主流网络视频流(http/rtsp/mms等),详细的中文介绍: 这里. Vitamio官网:http://vitamio.org/ Vitamio微博:http://weibo.com/vitamio VPlayer官网:http://vplayer.net Vitamio豆瓣:http://site.douban.com/145815/ 1.2 关于Vitam

  • Android Init进程对信号的处理流程详细介绍

    Android  Init进程对信号的处理流程 在Android中,当一个进程退出(exit())时,会向它的父进程发送一个SIGCHLD信号.父进程收到该信号后,会释放分配给该子进程的系统资源:并且父进程需要调用wait()或waitpid()等待子进程结束.如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出.这样的子进程不能被调度,所做的只是在进程列表中占据一个

  • Android修改DatePicker字体颜色及分割线颜色详细介绍

    一.DatePicker和TimePicker简介 DatePicker是一个日期选择控件,它继承自FrameLayout类,用来实现的主要功能是使用护可以方便选择日期.如果要捕获用户修改DataPicker控件中的数据改变事件,需要为DatePicker添加OnDateChangedListener监听器. TimePicker是一个时间选择控件,也继承自FrameLayout类.时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择.如果要捕获用户修改

  • Android入门之Toast的使用教程

    目录 介绍 课程目标 项目结构 前端代码 view_toast_custom.xml activity_main.xml 后端代码 MainActivity.java 介绍 本篇带来的是: Android用于提示信息的一个控件——Toast(吐司)!Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失! 非常常用!我们通过一个例子把Toast的使用讲透! 课程目标 我们的目标是实现2个Toast. 第一个Toast我们使用的是系统默认

  • Android编程四大组件之BroadcastReceiver(广播接收者)用法实例

    本文实例讲述了Android编程四大组件之BroadcastReceiver(广播接收者)用法.分享给大家供大家参考,具体如下: 这里介绍如何创建广播.如何发送一个无序广播和有序广播.以及监听短信以及监听呼出电话(当我们发短信和打电话,系统就会发一个广播,我们可以拦截此广播进行监听短信以及监听呼出电话). 定义广播接收者 1.定义类继承BroadcastReceiver,重写onReceive方法 2.当接收到匹配广播之后就会执行onReceive方法 3.清单文件中声明<receiver>,

  • 详解Android短信的发送和广播接收实现短信的监听

    本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zyw.broadcastsendsms" android:versionC

随机推荐