位置坐标监听、GPS卫星状态监听在Android应用中常见,我们是否一进入应用就注册相应的监听?

答案当然不是的。比如,手机的GPS没有打开,而我们注册了监听,那有什么用呢?

所以,我们应该实时监听手机的GPS打开状态,根据GPS状态来注册或取消注册事例~~

具体实现很简单,就是设置一个ContentObserver,用于观察GPS打开状态,如果GPS打开就注册监听器,如果GPS关闭就取消注册。代码如下:

 private final ContentObserver mGPSMonitor = new ContentObserver(null) {@Overridepublic void onChange(boolean selfChange) {// TODO Auto-generated method stubsuper.onChange(selfChange);boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);Log.d(TAG, "onChange: enabled = " + enabled);if (enabled) {registerGpsListener();} else {unregisterGpsListener();}}};/*** 注册监听*/private void registerGpsListener() {Log.d(TAG, "registerGpsListener");if (locationManager == null) {locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);}// 监听位置信息(经纬度变化)locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME, MIN_DISTANCE, locationListener);// 监听GPS状态,主要是捕获到的各个卫星的状态locationManager.addGpsStatusListener(gpsStatusListener);}/*** 移除监听*/private void unregisterGpsListener() {Log.d(TAG, "unregisterGpsListener");if (locationManager != null) {locationManager.removeGpsStatusListener(gpsStatusListener);locationManager.removeUpdates(locationListener);}}/*** 坐标位置监听*/private LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {accuracy.setText((int) location.getAccuracy() + "");}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}};/*** Gps状态监听*/private GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener() {public void onGpsStatusChanged(int event) {// Log.d(TAG, "gpsStatusListener: ");GpsStatus gpsStatus = locationManager.getGpsStatus(null);switch (event) {case GpsStatus.GPS_EVENT_FIRST_FIX:// 第一次定位时间UTC gps可用// Log.v(TAG,"GPS is usable");int i = gpsStatus.getTimeToFirstFix();break;case GpsStatus.GPS_EVENT_SATELLITE_STATUS:// 周期的报告卫星状态// Log.d(TAG, "gpsStatusListener: GPS_EVENT_SATELLITE_STATUS");// 得到所有收到的卫星的信息,包括 卫星的高度角、方位角、信噪比、和伪随机号(及卫星编号)Iterable<GpsSatellite> satellites = gpsStatus.getSatellites();showSatelliteList = new ArrayList<GpsSatellite>();connSatelliteList = new ArrayList<GpsSatellite>();for (GpsSatellite satellite : satellites) {// 包括 卫星的高度角、方位角、信噪比、和伪随机号(及卫星编号)/** satellite.getElevation(); //卫星仰角 satellite.getAzimuth();* //卫星方位角 satellite.getSnr(); //信噪比 satellite.getPrn();* //伪随机数,可以认为他就是卫星的编号 satellite.hasAlmanac(); //卫星历书* satellite.hasEphemeris(); satellite.usedInFix();*/showSatelliteList.add(satellite);if (satellite.usedInFix()) // 当卫星被GPS引擎用于计算最近位置时,返回trueconnSatelliteList.add(satellite);}// Log.d(TAG,// "gpsStatusListener: showSatelliteList.size() = "+showSatelliteList.size());showSatellite.setText(showSatelliteList.size() + "");connSatellite.setText(connSatelliteList.size() + "");drawSatellitesViwe.setSatellite(showSatelliteList, mRadius);updateLastDate = new Date();break;case GpsStatus.GPS_EVENT_STARTED:break;case GpsStatus.GPS_EVENT_STOPPED:setAllNull();break;default:break;}}};

上面有了 ContentObserver,当然还要设置观察者观察的对象了,可以在Activity的onCreate()中设定:

getContentResolver().registerContentObserver(Settings.Secure.getUriFor(Settings.System.LOCATION_PROVIDERS_ALLOWED),false, mGPSMonitor);

Android中如何监听手机GPS打开状态相关推荐

  1. Android 监听手机GPS打开状态

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854942 本文出自[赵彦军的博客] GPS_Presenter package ...

  2. Android中如何监听手机电话状态

    问题描述:当应用中需要对来电这一状态进行处理时(例如来电时显示来电话号码归属地等),就需要对电话状态进行监听. 解决步骤:1.对电话状态的监听最好是放在服务中,因为有一种服务的启动方式可以不依赖于ac ...

  3. Android开发之监听手机来电

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息.关于TelephonyManager的详解可以参照:Andr ...

  4. android 中如何监听按键的长按事件

    1,key -- 实体按键, 现在手机物理按键越来越少 常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYC ...

  5. 在Android中实现监听 返回键,主键,菜单键

    一.监听 返回键 onKeyDown方法和onBackPressed方法 onKeyDown: 是当某个按键被按下是触发.所以也有人在点击返回键的时候去执行该方法来做判断.(该方法只是android ...

  6. Android开发之监听软键盘状态(弹出收回)

    版权申明]非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/81511764 出自:shusheng007 ...

  7. android 监听手机电量变化

    今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...

  8. Android开发之监听或获取手机短信内容

    最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看 有两种方式: 方式一:通过广播监听短信信息 注册一个广播接收器 <receiver android:name=" ...

  9. Android监听手机短信

    Android监听手机短信的方法有两种,分别为: 1.接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容: 2.监听短信数据库:利用观察者模式监听短信数据库,当短信数 ...

最新文章

  1. 基于SSM实现保健院管理系统
  2. c语言 int64 t占位符,为什么我会得到“您必须为dtype int64提供占位符张量输出值”?...
  3. Python基础教程:类的property特性
  4. 程序员的爱情 第十二章
  5. 如何调整SAP HANA studio里的字体大小
  6. html中地图的绘制toolbars,三维GIS实验一:Surfer8地理信息制图.doc
  7. 【计算机网络复习】1.1.2 标准化工作及相关组织
  8. 儿童节到了,你会让孩子将来当程序员吗?
  9. javascript进阶——Ajax
  10. 小米商城抢购脚本_小米十周年感恩季-816活动攻略
  11. Linux命令详解(2)ip命令
  12. 2019亚马逊差评回复模板,老手惯用的亚马逊差评应对技巧
  13. MATLAB音乐十二平均律频谱分析与STM32电子琴(含源码)
  14. CEVA-DSP构成
  15. python的对文档密码的简单破解
  16. linux中tac命令详解,一天一个shell命令 linux文本操作系列-tac,rev命令详解
  17. ansible管理变量、机密和事实
  18. arduino读取RS485温湿度传感器实战总结
  19. QNX Screen---Blit
  20. 打不开 /dev/vmmon: 无此文件或目录。请确保已载入内核模块 ’vmmon’”。

热门文章

  1. C/C++语言基础进阶算法备赛面试 经典、实用、趣味 程序设计编程300例精解每日一练第37天
  2. python计算职工工资调整,关于Python 3:Python 3-实现一个函数来计算小时工资和工作小时数...
  3. js+css3多个爱心层叠波浪动画js特效
  4. 南京游泳池大起底_longware_新浪博客
  5. 典型实践|红豆股份王昌辉:中国服装企业转型升级迎来新的春天
  6. matlab 三维作图
  7. 第一个web网站需要了解什么?web新手入门
  8. win7共享文件找不到计算机,Win7文件夹属性中找不到共享选项怎么解决
  9. 5G工业路由器高速稳定传输
  10. linux中groupadd命令详解,Linux命令之groupadd详解