Android位置策略(一)

本文译自:http://developer.android.com/guide/topics/location/strategies.html

让你的应用程序了解用户的位置,可以更加智能的给用户发送更好的信息。在开发一款Android版的位置感知应用程序时,你能够利用GPS和Android的网络位置提供器来获取用户的位置。尽管GPS是最准确的,但它只能在户外工作,并且会快速的消耗电池电量,同时返回的位置信息也没有用户想要的那样快。Android的网络位置提供器使用蜂窝基站和Wi-Fi信号来判定用户位置,使用这种方式,可以在屋内和户外来提供位置信息,它响应快,并且耗电很少。要在你的应用程序中获取用户的位置,你能够同时使用GPS和网络位置提供器,或其中一种。

在确定用户位置中所面临的挑战

从移动设备上获取用户位置可能是复杂的。有几个原因可能导致读取的位置(不管使用哪种方式)包含错误和不准确信息。以下是在用位置中所包括的一些错误源:

1. 众多的位置源

GPS、Cell-ID和Wi-Fi都能够提供用户位置的线索。决定使用和信任哪条线索主要要权衡精度、速度和电池效率。

2. 用户的移动

因为用户位置的改变,你必须要因此而经常的重新计算用户的位置。

3. 不同的精度

因为位置估算来源与不同的位置探测源,所以它们的精度并不一致。从一个位置探测源10秒前获取的位置,可能比从另一个位置探测源获取的位置或同一个位置探测源所获取的位置要更准确。

这些问题使得获取一个稳定可靠的用户位置变的很困难。本文所提供的信息会帮助你在遇到这些问题的挑战时,来获取稳定可靠的位置信息。它还提供了一些建议,以便你能够在应用程序中提供准确的反应迅速的位置体验。

请求位置更新

在解决上述位置错误之前,首先要介绍如何在Android上获取用户位置。

通过回调的方式来获得在Android工作的用户位置。通过调用带有LocationListener对象的requestLocationUpdates()方法来指示你想要接收的来自LocationManager对象(位置管理器)的位置更新。你的locationListener接口必须实现位置管理器在用户位置改变或服务改变状态时所要调用的几个回调方法。

例如,下列代码显示了如何定义一个LocationListener接口,以及如何请求位置更新:

// Acquire a reference to the system Location Manager

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates

LocationListener locationListener = new LocationListener() {

    public void onLocationChanged(Location location) {

      // Called when a new location is found by the network location provider.

      makeUseOfNewLocation(location);

    }

     public void onStatusChanged(String provider, int status, Bundle extras) {}

     public void onProviderEnabled(String provider) {}

     public void onProviderDisabled(String provider) {}

  };

// Register the listener with the Location Manager to receive location updates

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

requestLocationUpdates()方法中的第一个参数是要使用的位置提供器的类型(在这个例子中,是基于蜂窝基站和Wi-Fi的网络位置提供器)。你能够用第二和第三个参数来控制你的监听器接收位置更新的频率---第二个参数是两个通知之间的最小间隔,第三个参数是两个通知之间位置改变的最小距离,把它们都设置为0,尽可能的提高位置通知的频率。最后一个参数是你的LocationListener,它用于接受位置更新的回调。

要请求来自GPS提供器的位置更新,用GPS_PROVIDER来代替NETWORK_PROVIDER。你还能够通过调用2~1NETWORK_PROVIDERrequestLocationUpdates()方法和一次的GPS_PROVIDERrequestLocationUpdates()方法来请求来自GPS和网络位置提供器的位置更新。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 《Android开发艺术探索》侧重于Android知识的体系化和系统工作机制的分析,通过《Android开发艺术探索》的学习可以极大地提高开发者的Android技术水平,从而更加高效地成为高级开发者。而对于高级开发者来说,仍然可以从《Android开发艺术探索》的知识体系中获益。 全书目录 ------------------------------------------------------------------- 第1章 Activity的生命周期和启动模式 / 1   1.1 Activity的生命周期全面分析 / 1   1.1.1 典型情况下的生命周期分析 / 2   1.1.2 异常情况下的生命周期分析 / 8   1.2 Activity的启动模式 / 16   1.2.1 Activity的LaunchMode / 16   1.2.2 Activity的Flags / 27   1.3 IntentFilter的匹配规则 / 28   第2章 IPC机制 / 35   2.1 Android IPC简介 / 35   2.2 Android中的多进程模式 / 36   2.2.1 开启多进程模式 / 36   2.2.2 多进程模式的运行机制 / 39   2.3 IPC基础概念介绍 / 42   2.3.1 Serializable接口 / 42   2.3.2 Parcelable接口 / 45   2.3.3 Binder / 47   2.4 Android中的IPC方式 / 61   2.4.1 使用Bundle / 61   2.4.2 使用文件共享 / 62   2.4.3 使用Messenger / 65   2.4.4 使用AIDL / 71   2.4.5 使用ContentProvider / 91   2.4.6 使用Socket / 103   2.5 Binder连接池 / 112   2.6 选用合适的IPC方式 / 121   第3章 View的事件体系 / 122   3.1 View基础知识 / 122   3.1.1 什么是View / 123   3.1.2 View的位置参数 / 123   3.1.3 MotionEvent和TouchSlop / 125   3.1.4 VelocityTracker、GestureDetector和Scroller / 126   3.2 View的滑动 / 129   3.2.1 使用scrollTo/scrollBy / 129   3.2.2 使用动画 / 131   3.2.3 改变布局参数 / 133   3.2.4 各种滑动方式的对比 / 133   3.3 弹性滑动 / 135   3.3.1 使用Scroller / 136   3.3.2 通过动画 / 138   3.3.3 使用延时策略 / 139   3.4 View的事件分发机制 / 140   3.4.1 点击事件的传递规则 / 140   3.4.2 事件分发的源码解析 / 144   3.5 View的滑动冲突 / 154   3.5.1 常见的滑动冲突场景 / 155   3.5.2 滑动冲突的处理规则 / 156   3.5.3 滑动冲突的解决方式 / 157   第4章 View的工作原理 / 174   4.1 初识ViewRoot和DecorView / 174   4.2 理解MeasureSpec / 177   4.2.1 MeasureSpec / 177   4.2.2 MeasureSpec和LayoutParams的对应关系 / 178   4.3 View的工作流程 / 183   4.3.1 measure过程 / 183   4.3.2 layout过程 / 193   4.3.3 draw过程 / 197   4.4 自定义View / 199   4.4.1 自定义View的分类 / 200   4.4.2 自定义View须知 / 201   4.4.3 自定义View示例 / 202   4.4.4 自定义View的思想 / 217   第5章 理解RemoteViews / 218   5.1 RemoteViews的应用 / 218   5.1.1 RemoteViews在通知栏上的应用 / 219   5.1.2 RemoteViews在桌面小部件上的应用 / 221   5.1.3 PendingIntent概述 / 228   5.2 RemoteViews的内部机制 / 230   5.3 RemoteViews的意义 / 239   第6章 Android的Drawable / 243   6.1 Drawable简介 / 243   6.2 Drawable的分类 / 244   6.2.1 BitmapDrawable / 244   6.2.2 ShapeDrawable / 247   6.2.3 LayerDrawable / 251   6.2.4 StateListDrawable / 253   6.2.5 LevelListDrawable / 255   6.2.6 TransitionDrawable / 256   6.2.7 InsetDrawable / 257   6.2.8 ScaleDrawable / 258   6.2.9 ClipDrawable / 260   6.3 自定义Drawable / 262   第7章 Android动画深入分析 / 265   7.1 View动画 / 265   7.1.1 View动画的种类 / 265   7.1.2 自定义View动画 / 270   7.1.3 帧动画 / 272   7.2 View动画的特殊使用场景 / 273   7.2.1 LayoutAnimation / 273   7.2.2 Activity的切换效果 / 275   7.3 属性动画 / 276   7.3.1 使用属性动画 / 276   7.3.2 理解插值器和估值器 / 280   7.3.3 属性动画的监听器 / 282   7.3.4 对任意属性做动画 / 282   7.3.5 属性动画的工作原理 / 288   7.4 使用动画的注意事项 / 292   第8章 理解Window和WindowManager / 294   8.1 Window和WindowManager / 294   8.2 Window的内部机制 / 297   8.2.1 Window的添加过程 / 298   8.2.2 Window的删除过程 / 301   8.2.3 Window的更新过程 / 303   8.3 Window的创建过程 / 304   8.3.1 Activity的Window创建过程 / 304   8.3.2 Dialog的Window创建过程 / 308   8.3.3 Toast的Window创建过程 / 311   第9章 四大组件的工作过程 / 316   9.1 四大组件的运行状态 / 316   9.2 Activity的工作过程 / 318   9.3 Service的工作过程 / 336   9.3.1 Service的启动过程 / 336   9.3.2 Service的绑定过程 / 344   9.4 BroadcastReceiver的工作过程 / 352   9.4.1 广播的注册过程 / 353   9.4.2 广播的发送和接收过程 / 356   9.5 ContentProvider的工作过程 / 362   第10章 Android的消息机制 / 372   10.1 Android的消息机制概述 / 373   10.2 Android的消息机制分析 / 375   10.2.1 ThreadLocal的工作原理 / 375   10.2.2 消息队列的工作原理 / 380   10.2.3 Looper的工作原理 / 383   10.2.4 Handler的工作原理 / 385   10.3 主线程的消息循环 / 389   第11章 Android的线程和线程池 / 391   11.1 主线程和子线程 / 392   11.2 Android中的线程形态 / 392   11.2.1 AsyncTask / 392   11.2.2 AsyncTask的工作原理 / 395   11.2.3 HandlerThread / 402   11.2.4 IntentService / 403   11.3 Android中的线程池 / 406   11.3.1 ThreadPoolExecutor / 407   11.3.2 线程池的分类 / 410   第12章 Bitmap的加载和Cache / 413   12.1 Bitmap的高效加载 / 414   12.2 Android中的缓存策略 / 417   12.2.1 LruCache / 418   12.2.2 DiskLruCache / 419   12.2.3 ImageLoader的实现 / 424   12.3 ImageLoader的使用 / 441   12.3.1 照片墙效果 / 441   12.3.2 优化列表的卡顿现象 / 446   第13章 综合技术 / 448   13.1 使用CrashHandler来获取应用的crash信息 / 449   13.2 使用multidex来解决方法数越界 / 455   13.3 Android的动态加载技术 / 463   13.4 反编译初步 / 469   13.4.1 使用dex2jar和jd-gui反编译apk / 470   13.4.2 使用apktool对apk进行二次打包 / 470   第14章 JNI和NDK编程 / 473   14.1 JNI的开发流程 / 474   14.2 NDK的开发流程 / 478   14.3 JNI的数据类型和类型签名 / 484   14.4 JNI调用Java方法的流程 / 486   第15章 Android性能优化 / 489   15.1 Android的性能优化方法 / 490   15.1.1 布局优化 / 490   15.1.2 绘制优化 / 493   15.1.3 内存泄露优化 / 493   15.1.4 响应速度优化和ANR日志分析 / 496   15.1.5 ListView和Bitmap优化 / 501   15.1.6 线程优化 / 501   15.1.7 一些性能优化建议 / 501   15.2 内存泄露分析之MAT工具 / 502   15.3 提高程序的可维护性 / 506
Android应用开发详解》 作者:郭宏志 编著 内容简介    本书分为三个部分,包括基础篇、技术篇和应用篇。由浅入深地讲述了Android应用开发的方方面面。    第一篇 基础篇 第1章 Android概述 Android概述,讲述了Android的前生后世、架构和特点、Android Market、应用程序组件和Android与Java ME的区别及联系    第2章 Android开发基础 Android开发基础,讲述了Android开发环境的搭建、Android常用工具的使用和第一个Android应用程序的开发    第二篇 技术篇 第3章 Android中的资源访问 Android 中的资源访问,讲述了如何定义和访问Android中的外部资源。   第4章 Android用户界面 Android 用户界面,讲述了Android中的事件处理机制、布局管理和常用组件的使用。    第5章 Android基本程序单元Activity Android 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容    第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和Intent的常见应用   第7章 Android Service组件 Android Service组件,讲述了Android中的后台服务Service的概念、创建和使用,并详细讲解了远程服务的调用    第8章 Android广播事件处理 Broadcast Receiver Android 广播事件处理 Broadcast Receiver,讲述了广播事件处理机制、Notification、NotificationManager和AlarmManager的使用    第9章 Android中的数据存取 Android中的数据存取,讲述了Android的四种数据存取方法:Preference、File、SQLite和Network    第10章 Content Provider Content Provider,讲述了Android不同应用程序之间相互共享数据的机制,包括ContentProvider和ContentResolver    第11章 Android中的多媒体应用 Android中的多媒体应用,讲述了Android的图片应用、音频及视频播放、音频及视频录制和照相机的使用    第12章 Android中的图形图像 Android中的图形图像,讲述了Android中的图片、动画、图形绘制和图形特效    第13章 Android中的互联网应用 Android中的互联网应用,讲述了Android中的各种网络应用,包括Socket、URL、HTTP、Web Service和WebView组件    第14章 Android中的GPS应用 Android中的GPS应用,讲述了LocationManager、LocationProvider、跟踪、定位、Geocoder正逆向编解码和可视化位置服务    第三篇 应用篇 第15章 Android应用案例——移动警务通 Android 应用案例——移动警务通,通过一个真实的商业案例讲解了Android的各种应用,本项目包括信息采集、信息查询、照片上传、GPS定位等综合警务应用    第16章 Android应用案例——雷电游戏 Android 应用案例——雷电游戏,通过一个完整的雷电游戏,讲述了Android的游戏开发思路、框架和具体实现,并比较了Android游戏开发和Java ME游戏开发的异同,成功移植了Java ME游戏API到Android当中    第17章 Android应用案例——备忘录 Android 应用案例——备忘录,通过一个Android基础应用项目综合应用了Android中的各种组件,包括Activity、Service、Broadcast Receiver、ContentProvider、Intent和View的应用    第18章 Android应用案例——无线点餐系统 Android 应用案例——无线点餐系统,通过一个真实的商业案例讲解了Android的各种应用,本项目包括操作员登录、点餐、结算、转台、并台、查台、更新数据和退出系统等餐厅点餐的常用操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值