`

让android的app可以定位

 
阅读更多

用户带和他们的移动设备与他们几乎无处不在。移动应用程序的独特功能之一是位置意识。明确的位置定位,并明智地使用信息,可以让使用者体验带来了更多的便利。

这篇文章将告诉你,如何在你的Andr​​oid应用程序将基于位置的服务。您会学到一些方法,以接收位置更新和最佳做法。本文的重点分为下面三点,下面会一一讲到,并指出其中的重点内容:

1.使用LocationManager(学习如何配置你的app,在它能接受到android的位置更新之前)

2.获取当前位置(学习如何使用底层位置技术平台上可用来获得当前位置)

3.显示位置地址(学习如何翻译为地址位置坐标对用户是可读的)

.使用LocationManager

manifest中声明网络权限:

Xml代码
  1. <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
  2. <uses-permissionandroid:name="android.permission.INTERNET"/>

获得位置管理的引用:

LocationManager是主要的类,通过这个应用程序可以访问的位置服务在Android上。类似于其他系统服务,可以得到一个引用从调用getSystemService()方法。如果你的应用程序准备接收位置更新前景(在一个活动),您应该执行该步骤通常在onCreate()方法。代码如下:

Java代码
  1. LocationManagerlocationManager=
  2. (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

获得位置的提供者:

取决于您的应用程序的用例,你必须选择一个特定位置,或多个提供者、提供者基于类似的权衡。例如,一个的兴趣点签入应用程序将需要更高的定位精度比说,零售商店定位器,一个城市水平位置修正就足够了。下面的代码片段要求一个提供者支持的GPS。代码如下:

Java代码
  1. LocationProviderprovider=
  2. locationManager.getProvider(LocationManager.GPS_PROVIDER);

添加条件增加精确度:

你可以提供一些输入标准如精度、电力需求,货币成本等等,让Android决定一个最接近的匹配位置提供者。下面的代码片段要求一个位置提供者与细准确性和没有货币成本。注意,标准可能没有解决任何提供者,在这种情况下,将返回null。代码如下:

Java代码
  1. //Retrievealistoflocationprovidersthathavefineaccuracy,nomonetarycost,etc
  2. Criteriacriteria=newCriteria();
  3. criteria.setAccuracy(Criteria.ACCURACY_FINE);
  4. criteria.setCostAllowed(false);
  5. ...
  6. StringproviderName=locManager.getBestProvider(criteria,true);
  7. //Ifnosuitableproviderisfound,nullisreturned.
  8. if(providerName!=null){
  9. ...
  10. }

验证位置提供者是否可以:

如果位置提供者是禁用的,您可以为用户提供一个机会,使它在设置一个Intent的

ACTION_LOCATION_SOURCE_SETTINGS代码如下:

Java代码
  1. @Override
  2. protectedvoidonStart(){
  3. super.onStart();
  4. //ThisverificationshouldbedoneduringonStart()becausethesystemcalls
  5. //thismethodwhentheuserreturnstotheactivity,whichensuresthedesired
  6. //locationproviderisenabledeachtimetheactivityresumesfromthestoppedstate.
  7. LocationManagerlocationManager=
  8. (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  9. finalbooleangpsEnabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
  10. if(!gpsEnabled){
  11. //Buildanalertdialogherethatrequeststhattheuserenable
  12. //thelocationservices,thenwhentheuserclicksthe"OK"button,
  13. //callenableLocationSettings()
  14. }
  15. }
  16. privatevoidenableLocationSettings(){
  17. IntentsettingsIntent=newIntent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  18. startActivity(settingsIntent);
  19. }

.获取当前位置

设置位置的监听

LocationManager类公开的一些方法来应用程序接收位置更新。在其最简单的形式,你注册一个事件侦听器,确定位置的经理,你想接收位置更新,并指定最小间隔时间和距离,接收位置更新。这个onLocationChanged()回调将调用的频率与时间和距离的间隔。在样例代码片段,下面的位置侦听器被设置为接收通知至少每10秒,如果设备移动超过10米。其他的回调方法通知应用程序状态更改任何来自提供者的位置。代码如下:

Java代码
  1. privatefinalLocationListenerlistener=newLocationListener(){
  2. @Override
  3. publicvoidonLocationChanged(Locationlocation){
  4. //Anewlocationupdateisreceived.Dosomethingusefulwithit.Inthiscase,
  5. //we'resendingtheupdatetoahandlerwhichthenupdatestheUIwiththenew
  6. //location.
  7. Message.obtain(mHandler,
  8. UPDATE_LATLNG,
  9. location.getLatitude()+","+
  10. location.getLongitude()).sendToTarget();
  11. ...
  12. }
  13. ...
  14. };
  15. mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
  16. 10000,//10-secondinterval.
  17. 10,//10meters.
  18. listener);

停止位置更新:

如果用户不再使用导航或者使用别的应用时,你应该停止位置更新通过调用removeUpdates()在onStop()。(onStop()时调用活动不再是可见的,代码如下:

Java代码
  1. protectedvoidonStop(){
  2. super.onStop();
  3. mLocationManager.removeUpdates(listener);
  4. }

.显示位置地址

执行反向地址编码:

逆向地理编码是翻译的过程,一个人类可读的纬度经度坐标地址。注意,在幕后,API是依赖于web服务。如果这样的服务不可用的设备,API将抛出一个“Service not Available exception”或者返回一个空列表的地址。

一个helper方法称为isPresent()添加于Android 2.3(API级别9)来检查服务的存在,

下面的代码片段演示了如何使用该API来执行反向地理编码Geocoder。代码如下:

Java代码
  1. privatefinalLocationListenerlistener=newLocationListener(){
  2. publicvoidonLocationChanged(Locationlocation){
  3. //Bypassreverse-geocodingiftheGeocoderserviceisnotavailableonthe
  4. //device.TheisPresent()convenientmethodisonlyavailableonGingerbreadorabove.
  5. if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD&&Geocoder.isPresent()){
  6. //SincethegeocodingAPIissynchronousandmaytakeawhile.Youdon'twanttolock
  7. //uptheUIthread.InvokingreversegeocodinginanAsyncTask.
  8. (newReverseGeocodingTask(this)).execute(newLocation[]{location});
  9. }
  10. }
  11. ...
  12. };
  13. //AsyncTaskencapsulatingthereverse-geocodingAPI.SincethegeocoderAPIisblocked,
  14. //wedonotwanttoinvokeitfromtheUIthread.
  15. privateclassReverseGeocodingTaskextendsAsyncTask<Location,Void,Void>{
  16. ContextmContext;
  17. publicReverseGeocodingTask(Contextcontext){
  18. super();
  19. mContext=context;
  20. }
  21. @Override
  22. protectedVoiddoInBackground(Location...params){
  23. Geocodergeocoder=newGeocoder(mContext,Locale.getDefault());
  24. Locationloc=params[0];
  25. List<Address>addresses=null;
  26. try{
  27. //CallthesynchronousgetFromLocation()methodbypassinginthelat/longvalues.
  28. addresses=geocoder.getFromLocation(loc.getLatitude(),loc.getLongitude(),1);
  29. }catch(IOExceptione){
  30. e.printStackTrace();
  31. //UpdateUIfieldwiththeexception.
  32. Message.obtain(mHandler,UPDATE_ADDRESS,e.toString()).sendToTarget();
  33. }
  34. if(addresses!=null&s;&s;addresses.size()>0){
  35. Addressaddress=addresses.get(0);
  36. //Formatthefirstlineofaddress(ifavailable),city,andcountryname.
  37. StringaddressText=String.format("%s,%s,%s",
  38. address.getMaxAddressLineIndex()>0?address.getAddressLine(0):"",
  39. address.getLocality(),
  40. address.getCountryName());
  41. //UpdatetheUIviaamessagehandler.
  42. Message.obtain(mHandler,UPDATE_ADDRESS,addressText).sendToTarget();
  43. }
  44. returnnull;
  45. }
  46. }

以上就是详细的对app定位的一些讲解和事例代码,只有部分代码,为的是突出重点和帮助大家理解,下面我贴上该例子全部的源代码,代码也不多,注释也很清楚,希望能帮到大家。点击打开链接


分享到:
评论

相关推荐

    Android app 闪退弹框 CrashUI当 Android app内发生exception

    在Android应用开发中,"Android app 闪退弹框 CrashUI"是一个常见的问题,它涉及到应用程序异常处理和用户体验。当Android应用在运行时遇到未被捕获的异常(Exception),系统会默认终止应用并显示一个简单的错误...

    WIFI室内定位Android APP,包括定位APP和数据采集APP

    标题中的“WIFI室内定位Android APP”涉及到的是一个利用Wi-Fi信号进行室内定位的移动应用,主要面向Android操作系统。在Android平台上开发这样的应用,开发者需要掌握以下关键知识点: 1. **Wi-Fi信号强度与定位**...

    Android Studio实例代码.zip_Android app实例_Android实例_android app源码_and

    这个标签可能是指使用Android Studio的调试工具,如Logcat,用于查看应用运行时的日志输出,帮助开发者定位和解决问题。 综上所述,这个压缩包中的实例代码是学习和提升Android应用开发技能的宝贵资源。通过研究...

    基于Android的寻人定位APP——爱守护·老人.pdf

    "基于Android的寻人定位APP——爱守护·老人" 本文旨在开发基于Android系统的寻人定位APP,旨在解决老年人走失的问题。该APP名称为"爱守护·老人",分为主控端和被控端两个部分。主控端安装在儿女的手机上,用于...

    基于Android人脸识别定位签到app(源码+演示视频)

    基于Android人脸识别定位签到app(源码+演示视频) 【项目技术】 android+php后台 【实现功能】 该系统分为普通用户和管理员两个角色,功能如下: 管理员: 1.发布签到任务:包含经纬度(签到地点),签到二维码...

    Android安卓百度地图定位实现APP

    1积分就可下载 Android安卓百度地图定位实现APP 下载即可用,显示地图、定位导航等文章说的功能 文章链接https://blog.csdn.net/u011752195/article/details/87887410

    AndroidApp定位和规避内存泄露方法研究

    本文档主要探讨了如何确定Android App是否存在内存泄露、如何定位内存泄露的位置以及如何规避内存泄露。 首先,识别内存泄露的关键在于监测App的内存使用情况。通过Android提供的工具,如DDMS(Dalvik Debug ...

    Android App设计开发 PPT

    课程覆盖了从基础到高级的多个关键知识点,通过系统的学习,可以让你逐步成为一名熟练的Android开发者。 1. **第01章:Android Studio入门** - Android Studio的安装与配置 - 创建第一个Android项目 - IDE界面...

    智能家居Android APP源码

    开发者还需要学会使用Android Studio的调试工具来定位和修复问题。 智能家居Android APP源码的分析和学习涵盖了Android开发的许多方面,对于希望深入理解Android系统和智能家居系统集成的开发者来说,这是一个宝贵...

    Android App定位和规避内存泄露方法研究

    Android应用程序的内存泄露是指应用程序在运行过程中,由于未能妥善管理资源,导致本应该释放的内存没有被系统回收...通过上述方法,我们可以有效地检测、定位和规避内存泄露问题,从而提升Android应用的性能和稳定性。

    使用Chrome浏览器调试Android App详解

    总的来说,Stetho极大地简化了Android App的调试工作,它将Chrome的强大功能扩展到了Android领域,让开发者可以更加高效地定位和解决问题。通过结合Chrome的Developer Tools,开发者可以像调试Web应用一样调试...

    Android-AndroidApp崩溃日志上传框架

    总之,"Android-AndroidApp崩溃日志上传框架"为开发者提供了一种高效且便捷的方式来收集和报告应用的崩溃信息,帮助他们更快地定位和解决问题,提高应用的质量和用户满意度。通过熟练掌握这类框架,开发者可以更专注...

    Android版百度定位、腾讯定位、高德定位三者混合

    混合定位可以利用多个服务提供商的数据,提高在各种环境下的定位成功率。 - **快速响应**:不同服务提供商的定位速度可能有差异,混合使用可以快速响应定位请求。 - **优化功耗**:通过智能选择最省电的定位服务,...

    android studio做的一个购物APP

    在性能优化方面,Android Studio的Profiler工具集可以帮助开发者监控内存、CPU使用、网络流量等,定位并解决性能瓶颈。同时,Lint静态代码分析工具可以发现潜在的问题,提升应用质量。 最后,Android Studio的版本...

    基于Android Studio开发的旅游记录与分享APP源码,Android旅游路线记录与分享APP源码

    综上所述,这个基于Android Studio的旅游记录与分享APP涉及了众多Android开发的关键技术,包括地图集成、位置服务、数据存储、网络通信以及用户体验设计等多个方面,对于学习和提升Android开发能力具有很高的参考...

    Android App开发入门范例程序

    在Android App开发领域,入门是每个开发者必经的阶段。这个"Android App开发入门范例程序"集合提供了多个章节的学习材料,旨在帮助新手快速掌握Android应用的基础开发技能。以下是各个章节和FlagAPI部分可能涉及的...

    Android旅游APP源码.zip

    【Android旅游APP源码】 这个压缩包文件"Android旅游APP源码.zip"包含了一个完整的Android应用程序源代码,专为旅游领域设计。通过分析其包含的文件,我们可以深入了解Android应用开发的一些核心概念和技术。 1. ...

    基于Android的餐饮管理app

    《基于Android的餐饮管理app深度解析》 在当今数字化的时代,移动应用已经深入到我们生活的各个角落,餐饮行业也不例外。本文将围绕一个基于Android平台的餐饮管理app进行深入探讨,该app由Android Studio开发,...

    Android Studio项目《天气预报app》

    【Android Studio项目《天气预报app》详解】 在移动开发领域,Android Studio是Google推出的一款集成开发环境(IDE),专门用于构建Android应用。本项目《天气预报app》是基于Android Studio开发的一个实例,它展示...

Global site tag (gtag.js) - Google Analytics