学习了前面的活动与服务后,你会发现服务对于活动而言似乎就是透明的,相反活动对于服务也是透明的,所以我们还需要一中机制能够将服务和活动之间架起一座桥梁,通过本节的学习,你将会学到广播与绑定服务,这两种方式恰恰是解决上面问题的关键。
二、简单的广播接收器
实现一个最简单的广播接收器需要继承BroadcastReceiver类,并且还要实现OnReceive方法,我们可以在项目中新建一个MainReceiver类,然后写入如下代码:
1 public class MainReceiver : BroadcastReceiver 2 { 3 public override void OnReceive(Context context, Intent intent) 4 { 5 6 } 7 }
上面其实已经实现了一个简单的广播接收器,并且可以使用。我们还需要注册广播接收器,否则广播接收器就无法接收广播,所以我们需要在MainActivity.cs中注册这个广播接收器。当然为了能够接近现实,我们需要在OnResume中注册,在OnPause中注销。
首先我们在OnResume中注册
1 protected override void OnResume() 2 { 3 base.OnResume(); 4 receiver = new MainReceiver(); 5 RegisterReceiver(receiver, new IntentFilter("xamarin-cn.main.receiver")); 6 }
接着我们在OnPause中注销
1 protected override void OnPause() 2 { 3 base.OnPause(); 4 UnregisterReceiver(receiver); 5 }
全部代码如下所示
1 [Activity(Label = "BroadcastStudy", MainLauncher = true, Icon = "@drawable/icon")] 2 public class MainActivity : Activity 3 { 4 private MainReceiver receiver; 5 6 protected override void OnCreate(Bundle bundle) 7 { 8 base.OnCreate(bundle); 9 SetContentView(Resource.Layout.Main); 10 } 11 12 protected override void OnResume() 13 { 14 base.OnResume(); 15 receiver = new MainReceiver(); 16 RegisterReceiver(receiver, new IntentFilter("xamarin-cn.main.receiver")); 17 } 18 19 protected override void OnPause() 20 { 21 base.OnPause(); 22 UnregisterReceiver(receiver); 23 } 24 }