android开发分享05-android-广播定位

广播Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcasttReceiver指的就是广播接收者(广播接收器),广播作为Android主件间的通信方式,可以使用的场景如下:1. 同一app内部的同一组件内的消息通信(单个或多个线程之间),2. 同一app内部的不同组件之间的消息通信(单个进程);3. 同一app具有多个进程的不同组件之间的消息通信,4. 不同app之间的组件之间消息通信5. android系统在特定情况下与APP之间的消息通信,BroadcastR


广播

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcasttReceiver指的就是广播接收者(广播接收器),广播作为Android主件间的通信方式,可以使用的场景如下:
1. 同一app内部的同一组件内的消息通信(单个或多个线程之间),
2. 同一app内部的不同组件之间的消息通信(单个进程);
3. 同一app具有多个进程的不同组件之间的消息通信,
4. 不同app之间的组件之间消息通信
5. android系统在特定情况下与APP之间的消息通信,

BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册,

  1. 静态注册:
    直接在AndroidManifest.xml文件中进行注册
    05-android-广播定位
    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的进程。可以指定独立的进程

05-android-广播定位
动态注册
动态注册时,无须在AndroidManifest中注册组件,直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver
05-android-广播定位

静态广播和动态广播的区别

  1. 动态注册的广播永远要快于静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级由多低,
  2. 在同一个优先级下,谁先启动的快,谁将先接受到广播 ,
  3. 动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期(在activity结束前,移除广播),静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行,

PendingIntent

PendingIntent是一个特殊的Intent,主要区别是Intent是立马执行,PendingIntent是待确定的Intent,PendingIntent的操作实际上是传入的Intent操作,使用PendingIntent的目的主要是用于所包含的Intent执行是否满足某些条件,
获取PendingIntent获取由三种方式

  1. getActivity(Context,context,int requestCode,Intent,intent,int flags).取得一个用于启动一个Activity的PendingIntent对象,
  2. getService(Context,context,int requestCode,Intent,intent,int flags)取得一个用于启动一个Service的PendingIntent对象,
  3. getBroadCast(Context,context,int reequestCode,Intent,intent,int flags)取得一个用与向BroadCastReceiver发送广播的PendingIntent对象
  4. 以广播的形式说明getBroadCast(context,context),int requestCode,Intent intent ,int flags);第一个参数是上下文,第二个参数是每次requestCode不同,就能产生多个PendingIntent ,第三个参数是用来存储信息,第四个参数是对不同操作标识
  5. PendingIntent的flags参数,
  6. FLAG_CANCEL_CURRENT:如果PendingIntent已经存在,那么就会取消当前的PendingIntent,从而创建一个新的PendingIntent
    2.FLAG_UPDATE_CURRENT:如果PendingIntent已经存在,让新的Intent更新之前,Intent对象数据,例如更新Intent中的Extras,另外,我们也可以在PendingIntent的原进程中调用,PendingIntent的cancel()把其从系统中移除掉,
  7. FLAG_NO_CREATE:如果PendingIntent已经存在,那么将不进行任何操作,若描述的Intent不存在直接返回NULL(空)
    8.FLAG_ONE_SHOT:该PendingIntent只作用一次,在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()方法进行销毁,那么如果你再调用send()方法的话将会失败,系统将会返回一个SendIntentException

LocationManager常量

LocationManager常量可在Intent中携带,

  1. LocationManager.KEY_LOCATION_CHANGED更新的位置消息,
  2. LocationManager.KEY_PROVIDER_ENABLED启用和禁用提供者时广播事件的标记
  3. LocationManager.KEY_PROXIMITY_ENTERRING指明接近警报进入和退出的时机,
  4. LocationManager.KEY_STATUS_CHANGED
  5. 广播状态改变时位置提供者的状态更新,

requestLocationUpdates

  1. requestLocationUpdates(provider,time,dis,listener)
  2. requestLocationUpdates(provider,time,dis,PendingIntent)
    05-android-广播定位
    使用广播和PendingIntent监听位置变化

05-android-广播定位

SUMMARY
1.静态广播与动态广播的区别
2.Intent与PendingIntent的区别
3.使用PendingIntent监听位置变化

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/895949.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐