制作一个最简单的Broadcast
实现一个最简单的广播接收器需要继承BroadcastReceiver类(抽象类),并且还要实现OnReceive方法,
默认情况下:广播接收器也是运行在UI线程里面的,所以一般不要写太多太耗时的操作代码
先实现一个类,继承BroadcastReceiver,当这个广播被接收时就会调用这个方法
class BroadReceiver:Android.Content.BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
//todo
}
}
还记得Android入门时提到的四大件吗?
---------Activity 服务 广播 Content Provider
四大件的共通点就是都需要注册
所以
我们还需要注册广播接收器,否则广播接收器就无法接收广播,我们需要在MainActivity.cs中注册这个广播接收器。
注册一个广播
private BroadReceiver broad;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
var button = FindViewById<Button>(Resource.Id.MyButton);
button.Click += delegate
{
//实例化一个广播
broad = new BroadReceiver();
RegisterReceiver(broad, new IntentFilter()); //Register
};
}
发送广播
接下来我们要做的就是发送广播了
在网上看到一段话,我觉得对这个广播理解的特别好
我们拿广播电台来做个比方。我们平常使用收音机收音是这样的:许许多多不同的广播电台通过特定的频率来发送他们的内容,而我们用户只需要将频率调成和广播电台的一样就可以收听他们的内容了。Android中的广播机制就和这个差不多的道理。
电台发送的内容是语音,而在Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据。
电台通过大功率的发射器发送内容,而在Android中则是通过sendBroadcast这个方法来发送
户通过调整到具体的电台频率接受电台的内容。而在Android中要接受广播中的内容则是通过注册一个BroadCastReceiver来接收的。只有发送广播的action和接收广播的action相同,接受者才能接受这个广播。
取消注册广播
Cancel.Click += delegate
{
UnregisterReceiver(broad);//ungister
};
动态和静态注册的区别
动态和静态注册广播之间的区别就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。