今天跟大家分享一个BroadcastReceiver 静态注册的一个简单小例子。
预备知识:
1.什么是广播?
答:广播接收器,也被称为全局事件,或系统事件。
2.广播的三要素:
答:
1) 广播(Broadcast) - 用于发送广播;
2) 广播接收器(BroadcastReceiver) - 用于接收广播;
3) 意图内容(Intent)-用于保存广播相关信息的媒介。
Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。
3.广播的生命周期
答:
1)、广播接收器仅在它执行这个方法时处于活跃状态。当onReceive()返回后,它即为失活状态。
2)、拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死,但仅拥有失活状态组件的进程则会在其它进程 需要它所占有的内存的时候随时被杀掉。
3)、如果响应一个广播信息需要很长的一段时间,一般会将其纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户交互过程的流畅。
4.广播接收器的注册分类
答:
1)、静态注册
特点:当使用程序退出后,广播依然存在
<receiver android:name=“.XXXReceiver”>
<intent-filter>
<action android:name="频段"/>
</intent-filter>
</receiver>
2)、动态注册
特点:该广播仅在应用中有效,退出后不再接收广播。
registerReceiver():注册广播
unregisterReceiver():注销广播
静态广播接收器注册
步骤:
1:新建一个类,继承BroadcastReceiver
2:在清单配置文件中动态注册
<receiver android:name=".StaticBroadcastReceiver">
<intent-filter> </intent-filter></receiver>
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.victor.a1000phone.day22_demo2_broadcastreceiverstatic.MainActivity">
<Button
android:id="@+id/btn_static"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="点击发送广播" />
</RelativeLayout>
MainActivity.class
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
/**
* Created by Victor on 2016/9/21 0021.
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view)
{
switch(view.getId())
{
case R.id.btn_static:
Intent intent = new Intent();
intent.setAction("com.victor.happy");
intent.putExtra("msg","BroadcastReceiver静态注册");
//发送一条普通的广播
sendBroadcast(intent);
break;
default:
break;
}
}
}
MyBroadcastReceiver.class
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/**
* Created by Victor on 2016/9/21 0021.
*/
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,intent.getStringExtra(“msg”),Toast.LENGTH_LONG).show();
}
}
AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.victor.a1000phone.day22_demo2_broadcastreceiverstatic">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.victor.happy"/>
</intent-filter>
</receiver>
</application>
运行结果: