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;
    }

}
复制代码

 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/3602323.html如需转载请自行联系原作者


欢醉

相关文章
|
2月前
|
设计模式 Android开发
[Android 四大组件] --- BroadcastReceiver
[Android 四大组件] --- BroadcastReceiver
43 0
|
1月前
|
设计模式 Android开发
44. 【Android教程】广播接收器:Broadcast Receiver
44. 【Android教程】广播接收器:Broadcast Receiver
19 2
|
2月前
|
Android开发 Kotlin
android开发,使用kotlin学习BroadcastReceiver
android开发,使用kotlin学习BroadcastReceiver
138 0
|
11月前
|
Android开发
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信(二)
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信
89 0
|
11月前
|
Android开发
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信(一)
Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信
82 0
|
11月前
|
数据库 Android开发 开发者
Android 开发四大组件(Activity、Service、Broadcast Receiver、Content Provider)
Android 开发四大组件(Activity、Service、Broadcast Receiver、Content Provider)
120 0
|
API Android开发 开发者
Android四大组件-BroadcastReceiver
Android四大组件-BroadcastReceiver
99 0
|
Android开发
Android四大组件之BroadcastReceiver(四)
两个方面来解决BroadcastReceiver存在的安全隐患,分别是自定义广播权限和使用LocalBroadcastManager。
108 1
|
安全 Android开发
Android四大组件之BroadcastReceiver(三)
接下来讲一下有序广播中对广播的拦截、有序广播与标准广播的区别、广播的安全性问题
196 1
|
物联网 Android开发
Android 解析蓝牙广播数据
Android 解析蓝牙广播数据
1101 1
Android 解析蓝牙广播数据