05-android-广播定位
广播
Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcasttReceiver指的就是广播接收者(广播接收器),广播作为Android主件间的通信方式,可以使用的场景如下:
1. 同一app内部的同一组件内的消息通信(单个或多个线程之间),
2. 同一app内部的不同组件之间的消息通信(单个进程);
3. 同一app具有多个进程的不同组件之间的消息通信,
4. 不同app之间的组件之间消息通信
5. android系统在特定情况下与APP之间的消息通信,
BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册,
- 静态注册:
直接在AndroidManifest.xml文件中进行注册
1、android:exported—此broadcastReceiver能否接收其他App的发出的广播,其默认值是由receiver中有无intent-filter决定的,如果有intent-filter,默认值为true,否则为false。
2、android:name—此broadcastReceiver类名;
3、android:permission——如果设置,具有相应权限的广播发送方发送的广播才能被此broadcastReceiver所接收;
4、android:process——broadcastReceiver运行所处的进程。默认为app的进程。可以指定独立的进程
动态注册
动态注册时,无须在AndroidManifest中注册组件,直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver
静态广播和动态广播的区别
- 动态注册的广播永远要快于静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级由多低,
- 在同一个优先级下,谁先启动的快,谁将先接受到广播 ,
- 动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期(在activity结束前,移除广播),静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行,
PendingIntent
PendingIntent是一个特殊的Intent,主要区别是Intent是立马执行,PendingIntent是待确定的Intent,PendingIntent的操作实际上是传入的Intent操作,使用PendingIntent的目的主要是用于所包含的Intent执行是否满足某些条件,
获取PendingIntent获取由三种方式
- getActivity(Context,context,int requestCode,Intent,intent,int flags).取得一个用于启动一个Activity的PendingIntent对象,
- getService(Context,context,int requestCode,Intent,intent,int flags)取得一个用于启动一个Service的PendingIntent对象,
- getBroadCast(Context,context,int reequestCode,Intent,intent,int flags)取得一个用与向BroadCastReceiver发送广播的PendingIntent对象
- 以广播的形式说明getBroadCast(context,context),int requestCode,Intent intent ,int flags);第一个参数是上下文,第二个参数是每次requestCode不同,就能产生多个PendingIntent ,第三个参数是用来存储信息,第四个参数是对不同操作标识
- PendingIntent的flags参数,
- FLAG_CANCEL_CURRENT:如果PendingIntent已经存在,那么就会取消当前的PendingIntent,从而创建一个新的PendingIntent
2.FLAG_UPDATE_CURRENT:如果PendingIntent已经存在,让新的Intent更新之前,Intent对象数据,例如更新Intent中的Extras,另外,我们也可以在PendingIntent的原进程中调用,PendingIntent的cancel()把其从系统中移除掉, - FLAG_NO_CREATE:如果PendingIntent已经存在,那么将不进行任何操作,若描述的Intent不存在直接返回NULL(空)
8.FLAG_ONE_SHOT:该PendingIntent只作用一次,在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()方法进行销毁,那么如果你再调用send()方法的话将会失败,系统将会返回一个SendIntentException
LocationManager常量
LocationManager常量可在Intent中携带,
- LocationManager.KEY_LOCATION_CHANGED更新的位置消息,
- LocationManager.KEY_PROVIDER_ENABLED启用和禁用提供者时广播事件的标记
- LocationManager.KEY_PROXIMITY_ENTERRING指明接近警报进入和退出的时机,
- LocationManager.KEY_STATUS_CHANGED
- 广播状态改变时位置提供者的状态更新,
requestLocationUpdates
- requestLocationUpdates(provider,time,dis,listener)
- requestLocationUpdates(provider,time,dis,PendingIntent)
使用广播和PendingIntent监听位置变化
SUMMARY
1.静态广播与动态广播的区别
2.Intent与PendingIntent的区别
3.使用PendingIntent监听位置变化
本文地址:https://blog.csdn.net/weixin_44123412/article/details/107491948
上一篇: 骁龙888蔡司旗舰!vivo X60 Pro+开箱图赏 颜值种草
下一篇: 2. 路由事件 简单理解