博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中BroadcastReceiver广播
阅读量:4660 次
发布时间:2019-06-09

本文共 3749 字,大约阅读时间需要 12 分钟。

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

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

……

界面:

 

构建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中
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; }}

 

 

转载于:https://www.cnblogs.com/zhangs1986/p/3602323.html

你可能感兴趣的文章
linux 软件安装篇
查看>>
Sql server数据库大小写敏感设置
查看>>
JAVA多线程-内存模型、三大特性、线程池
查看>>
RxJS速成 (下)
查看>>
无锁栈与无锁队列
查看>>
微信开发第8章 通过accesstoken将长连接转换为短链接
查看>>
[刷题]Codeforces 785D - Anton and School - 2
查看>>
四川红油的制法
查看>>
Java重写《C经典100题》 --21
查看>>
【Android基础】Fragment 详解之Fragment生命周期
查看>>
链表(裸题)
查看>>
11运算符重载
查看>>
磁盘系统的管理
查看>>
C/S
查看>>
Http Get/Post请求的区别
查看>>
STM32一键下载电路设计原理
查看>>
C语言中函数返回字符串的四种方法
查看>>
10月区块链领域投融资事件盘点
查看>>
Mybatis缓存策略
查看>>
卷积的意义【转】
查看>>