Android中BroadcastReceiver广播

BroadCastReceiver 简介

广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用 Context.sendBroadcast() 、 Context.sendOrderedBroadcast() 来实现的。通常一个广播 Intent 可以被订阅了此 Intent 的多个广播接收者所接收。 

广播是一种广泛运用的在应用程序之间传输信息的机制 。而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件; 

来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。

 BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者通过 NotificationMananger 提醒用户,或者启动 Service 等等。

生命周期

    一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。

    因此从这个特征可以看出,在所调用的onReceive(Context, Intent)函数里,不能有过于耗时的操作,不能使用线程来执行。对于耗时的操作,请start service来完成。因为当得到其他异步操作所返回的结果时,BroadcastReceiver 可能已经无效了。

 

使用BroadcastReceiver


编写类继承BroadcastReceiver,复写onReceiver()方法

package com.example.receive;

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

public class MyReceivceReg extends BroadcastReceiver {

private static final String TAG = "MyReceivce";

public MyReceivceReg(){
Log.i(TAG,"MyReceivceReg");

}
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG,"onReceiveReg");
}

}

 

在Manifest.xml中注册BroadcastReceiver

<receiver android:name="com.example.receive.MyReceivce">
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>

要接收某些action,需要在AndroidManifest.xml里面添加相应的permission。例如接收SMS:

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
……
</manifest>

界面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:orientation="vertical"
    tools:context=".AndroidBroadcastServiceActivity" >

    <Button
        android:id="@+id/btnStartBroad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="启动Broadservice"
         >
    </Button>

     <Button
        android:id="@+id/btnRegisterBroad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册RegisterBroad"
         >
    </Button>

      <Button
        android:id="@+id/btnUnRegisterBroad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="取消RegisterBroad"
         >
    </Button>

</LinearLayout>

 

构建Intent,发送

package com.example.androidbroadcastservice;

import com.example.receive.MyReceivceReg;

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 AndroidBroadcastServiceActivity extends Activity {
    protected static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";//广播类型。其实是对应Manifest.xml中<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    private Button btnStartBroad,btnRegisterBroad,btnUnRegisterBroad;
    private MyReceivceReg receivece;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_android_broadcast_service);
        btnStartBroad = (Button) this.findViewById(R.id.btnStartBroad);
        btnStartBroad.setOnClickListener(onclick);

        btnRegisterBroad = (Button) this.findViewById(R.id.btnRegisterBroad);
        btnRegisterBroad.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                receivece=new MyReceivceReg();
                IntentFilter filter=new IntentFilter();
                filter.addAction(ACTION);
                registerReceiver(receivece, filter);
            }
        });

        btnUnRegisterBroad = (Button) this.findViewById(R.id.btnUnRegisterBroad);
        btnUnRegisterBroad.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //MyReceivceReg receivece=new MyReceivceReg();
                //IntentFilter filter=new IntentFilter(ACTION);
                unregisterReceiver(receivece);
            }
        });
    }
    private OnClickListener onclick = new OnClickListener() {

        @Override
        public void onClick(View v) {
                Intent intent=new Intent();
                intent.setAction(ACTION);
                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_android_broadcast_service,
                menu);
        return true;
    }

}

 

 

时间: 2024-10-27 21:26:30

Android中BroadcastReceiver广播的相关文章

深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解_Android

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

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

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

Android中BroadcastReceiver(异步接收广播Intent)的使用_Android

Broadcast Receiver简介 Broadcast Receiver是Android的五大组件之一,使用频率也很高. 用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast().广播接收者(BroadcastReceiver)用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast().Context.sendOrderedBroadcast()或者Context.sendStickyBr

Android中BroadcastReceiver(异步接收广播Intent)的使用

Broadcast Receiver简介 Broadcast Receiver是Android的五大组件之一,使用频率也很高. 用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast().广播接收者(BroadcastReceiver)用于异步接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast().Context.sendOrderedBroadcast()或者Context.sendStickyBr

Android中BroadcastReceiver

1.  BroadcastReceiver(广播接受者) 该组件接受被广播的intent,Context可以通过sendBroadcast()和sendOrderedBroadcast()方法实现广播. public class IncomingSMSReceiver extends BroadcastReceiver{          public void onReceiver(Context context,Intent intent){   } } 注册接收者 编程式((意图actio

详解Android中BroadCastReceiver组件_Android

BroadcastReceiver也就是"广播接收者"的意思,它是用来接收来自系统和应用中的广播. 在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件. 下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程: (1)首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action.Category)装入一

Android中的广播、服务、数据库、通知、包等术语的原理和介绍(图解)_Android

 简介  在Android中运用了很多机制,例如:广播.服务.数据库.通知.包--等等. 什么是广播?Broadcast是一种广泛运用的在应用程序之间传输信息的机制.类似广播电台,根据特定频率来接收发送. 什么是服务?Service是android 系统中的四大组件之一,它跟Activity级别一样,但不能自己运行只能后台运行,并且可以和其他组件进行交互.使用场合例如:后台音乐播放器. 使用了什么数据库?在android中使用了开源项目sqlite操作数据. SQLite数据库是D.Richar

我的Android进阶之旅------&amp;gt;Android中MediaButtonReceiver广播监听器的机制分析

今天看公司的一段关于MediaButtonReceiver的代码看的比较混乱,幸好看了下面的这篇文章,才能茅塞顿开的理解好代码.在此转载下来,以备以后理解,希望都到这篇文章的人也能够有所帮助. 本文转载于:http://blog.csdn.net/qinjuning/article/details/6938436 在Android中并没有定义MediaButtonReceive这个广播类,MediaButtonReceive只是作为一种通俗的命名方式来响应    插入耳机后,点击耳机上的按钮(名