xamarin学习笔记A08(安卓广播)
来源:互联网 发布:淘宝双十一买什么划算 编辑:程序博客网 时间:2024/06/05 19:33
(每次学习一点xamarin就做个学习笔记和视频来加深记忆巩固知识)
如有不正确的地方,请帮我指正。
广播简介
广播用于在组件之间进行通信。
可用于App与Android系统之间通信。
可用于App与App之间通信。
可用于App内部不同组件之间通信。
广播分为两类:标准广播和有序广播。
标准广播发出之后,所有广播接收器几乎在同一时间接收到。有序广播在同一时间只有一个接收器才能收到,第一个接收器的逻辑执行完后广播可以继续传到下一下接收器。接收器有优先级,优先级高的先收到广播。
系统广播
Android系统有很多内置的广播。例如开机完成后会发送一条广播,还有网络开启或关闭后也会发送一条广播,还有电量变化等等。
怎样接收广播呢,第一步:新建一个类,继承自BroadcastReceiver,然后重写OnReceive方法。第二步:如果需要权限,则在AndroidManifest.xml文件中声明所需的权限。
下面是一个接收系统启动后的广播接收器的代码:
/* Enabled = true表示启用这个广播接收器 Exported = true表示可以接收本程序之外的广播 Intent.ActionBootCompleted表示安卓系统启动完成后的广播 [IntentFilter(new string[] { Intent.ActionBootCompleted })]表示这个类是收听系统启动后发出的广播 以上代码会在AndroidManifest.xml文件的application这个节点内生成如下代码: <receiver android:name=".BootCompletedReceiver" android:enabled="true" android:exported="true" <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> */ [BroadcastReceiver(Enabled = true, Exported = true)] [IntentFilter(new string[] { Intent.ActionBootCompleted })] public class BootCompletedReceiver : BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { Toast.MakeText(context, "收到开机完成的广播", ToastLength.Long).Show(); }}
在AndroidManifest.xml文件中声明了权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
在AndroidManifest文件中生成receiver节点来注册广播接收器的方式称为静态注册方式,这种方式的好处是不需要启动程序,也可以收到广播。
下面是动态注册广播接收器的代码。
首先新建一个网络状态变化的广播接收器
//网络状态变化的广播接收器 public class NetChangedReceiver : BroadcastReceiver { public ConnectivityManager ConnectivityManager { get; set; } public override void OnReceive(Context context, Intent intent) { NetworkInfo networkInfo = ConnectivityManager.ActiveNetworkInfo; if(networkInfo!=null && networkInfo.IsAvailable) Toast.MakeText(context, "网络状态有效", ToastLength.Short).Show(); else Toast.MakeText(context, "网络状态无效", ToastLength.Short).Show(); }}
然后在AndroidManifest.xml文件中声明所需权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
最后在MainActivity中实现相关代码:
public class MainActivity : AppCompatActivity { private IntentFilter m_IntentFilter; private NetChangedReceiver m_NetChangedReceiver; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); m_IntentFilter = new IntentFilter(); m_IntentFilter.AddAction("android.net.conn.CONNECTIVITY_CHANGE");//收听网络状态变化的广播 m_NetChangedReceiver = new NetChangedReceiver(); m_NetChangedReceiver.ConnectivityManager = this.GetSystemService(Context.ConnectivityService) as ConnectivityManager; this.RegisterReceiver(m_NetChangedReceiver, m_IntentFilter);//注册广播接收器 } protected override void OnDestroy() { base.OnDestroy(); this.UnregisterReceiver(m_NetChangedReceiver); //解除NetChangedReceiver广播接收器的注册 } }
动态注册的广播接收器要记得取消注册。
自定义广播
发送自定义广播又分发送全局广播和发送本地广播。 全局广播可以被其它应用程序接收到,而本地广播只能在应用程序内部传递。
举个例子,贴上MainActivity中的部分代码:
public void OnClick(View v) { Intent intent; switch (v.Id) { case Resource.Id.button1: intent = new Intent("com.abc.A08.Msg_Broadcast"); intent.PutExtra("s", "明天放假"); this.SendBroadcast(intent);//发送全局标准广播 //this.SendOrderedBroadcast(intent, null);//发送全局有序广播 break; case Resource.Id.button2: intent = new Intent("com.abc.A08.Hello_Broadcast"); m_LocalBroadcastManager.SendBroadcast(intent);//发送本地广播 break; }}private LocalBroadcastManager m_LocalBroadcastManager;protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); m_LocalBroadcastManager = LocalBroadcastManager.GetInstance(this); }protected override void OnDestroy() { base.OnDestroy(); m_LocalBroadcastManager.UnregisterReceiver(m_HelloReceiver);//解除com.abc.A08.Hello_Broadcast广播接收器的注册 }
从上面的代码可以看出,发送广播是用的Intent对象,”com.abc.A08.Msg_Broadcast”是自定义的广播名称, “明天放假”是要广播出去的文本内容,然后通过SendBroadcast方法发送全局标准广播,或者通过SendOrderedBroadcast发送全局有序广播。使用LocalBroadcastManager的实例的SendBroadcast方法来发送本地广播。
完整代码和视频在我上传的CSDN资源中http://download.csdn.net/download/junshangshui/9926948
- xamarin学习笔记A08(安卓广播)
- xamarin学习笔记A03(安卓Activiy)
- xamarin学习笔记A07(安卓Fragment)
- xamarin学习笔记A10(安卓SQLite)
- xamarin学习笔记A11(安卓ContentProvider)
- xamarin学习笔记A12(安卓Notification)
- xamarin学习笔记A18(安卓Service)
- xamarin学习笔记A19(安卓AIDL)
- xamarin学习笔记A02(安卓项目组成)
- xamarin学习笔记A04(安卓基本布局)
- xamarin学习笔记A05(安卓RecycleView简单显示)
- xamarin学习笔记A06(安卓RecycleView点击事件)
- xamarin学习笔记A09(安卓数据简单存储)
- xamarin学习笔记A13(安卓Handler异步消息处理)
- xamarin学习笔记A14(安卓AsyncTask和RunOnUiThread)
- xamarin学习笔记A15(安卓OkHttp3和HttpURLConnection) 上
- xamarin学习笔记A16(安卓OkHttp3和HttpURLConnection)下
- xamarin学习笔记A17(安卓Parcel和IParcelable)
- QAQ & 火星情报局
- 算法导论-动态规划-钢条切割
- 51nod 1076 2条不相交的路径 tarjan算法
- 好书
- D-query SPOJ
- xamarin学习笔记A08(安卓广播)
- Sort it(逆序数)
- 归并排序模版(分治思想)
- Hive家族学习路线图
- react vr 消息传递原理解析
- java.lang.NoClassDefFoundError错误产生的原因及解决方案
- 13.1.1 拷贝构造函数
- centos7 配置flask环境
- 24.Scala中SAM转换实战详解