您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Android教程之位置与地图服务_by_hoyah
Android位置和地图服务版权保留谢绝转载Byhoyah:hoyah.me@gmail.comAndroidAndroidAndroidAndroid位置和地图使用教程Android位置服务需要用到android.location包(默认包自带),涉及地图服务时,就需要导入外部库--GoogleMapsAPI。调试使用GoogleMap的程序时,要新建一个使用GoogleMapApi的模拟器。下面详细讨论。LocationLocationLocationLocationServicesServicesServicesServices位置服务的核心组件是LocationManager系统服务。像其他系统服务一样,在创建LocationManager的实例时,只需调用getSystemService(Context.LOCATION_SERVICE),而不需用new来创建。ObtainingObtainingObtainingObtainingUserUserUserUserLocationLocationLocationLocation如果程序可以获取用户当前的位置,那么程序就可以更加智能的为用户提供相关信息。Android设备获取位置的方法有两种:GPS和Android’NetworkLocationProvider.GPS定位更精确,缺点是只能在户外使用,耗电严重,且其返回用户位置的速度远不能满足用户需求。Android’NetworkLocationProvider通过基站和Wi-Fi信号来获取位置信息,室内外均可使用,速度更快,耗电更少。为了获取用户位置信息,你可以同时使用GPS和NetworkLocationProvider,或者选择二者之一。RequestingRequestingRequestingRequestingLocationLocationLocationLocationUpdatesUpdatesUpdatesUpdates当用户的位置改变时,要获取最新的位置,就需要用到LocationListener来监听用户位置。如下://实例化一个位置服务LocationManagerlocationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);//创建监听器LocationListenerlocationListener=newLocationListener(){publicvoidonLocationChanged(Locationlocation){//发现新位置时调用makeUseOfNewLocation(location);}publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}publicvoidonProviderEnabled(Stringprovider){}publicvoidonProviderDisabled(Stringprovider){}};//注册监听器locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);Android位置和地图服务版权保留谢绝转载Byhoyah:hoyah.me@gmail.comrequestLocationUpdates()方法的参数解释如下:第一个参数:位置服务的类型,也就是程序通过什么来获取用户的位置信息(此例中是NetworkLocationProvider和Wi-Fi).第二个参数:两次位置提醒之间的最小时间间隔。第三个参数:两次位置提醒之间最小距离间隔。(第二、三两个参数都为0表示尽可能频繁的请求位置信息)第四个参数:LocationListenerRequestingRequestingRequestingRequestingUserUserUserUserPermissionsPermissionsPermissionsPermissions为了从NETWORK_PROVIDER或GPS_PROVIDER获取位置更新,必须声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限。manifest...uses-permissionandroid:name=android.permission.ACCESS_FINE_LOCATION/.../manifest➹注意:如果同时使用NETWORK_PROVIDER和GPS_PROVIDER,就只需声明ACCESS_FINE_LOCATION权限。ACCESS_COARSE_LOCATION只包含NETWORK_PROVIDER的权限)。ModelModelModelModelforforforforobtainingobtainingobtainingobtaininguseruseruseruserlocationlocationlocationlocationGettingGettingGettingGettingaaaafastfastfastfastfixfixfixfixwithwithwithwiththethethethelastlastlastlastknownknownknownknownlocationlocationlocationlocation一般来说监听器获取第一个修正位置所需的时间比较长,因此,你可以调用getLastKnownLocation(String)方法来利用缓存中的位置信息。LocationProviderlocationProvider=LocationManager.NETWORK_PROVIDER;//OruseLocationManager.GPS_PROVIDERLocationlastKnownLocation=locationManager.getLastKnownLocation(locationProvider);DecidingDecidingDecidingDecidingwhenwhenwhenwhentotototostopstopstopstoplisteninglisteninglisteninglisteningforforforforupdatesupdatesupdatesupdatesAndroid位置和地图服务版权保留谢绝转载Byhoyah:hoyah.me@gmail.com一个程序具体什么时候停止更新位置信息,根据程序需求的不同有很大区别,有些很简单,有些较复杂。一般来说,当用户已经获取了所需的位置信息时,就可以停止监听。调用如下方法://RemovethelisteneryoupreviouslyaddedlocationManager.removeUpdates(locationListener);MaintainingMaintainingMaintainingMaintainingaaaacurrentcurrentcurrentcurrentbestbestbestbestestimateestimateestimateestimate用户自然希望最新修正的位置也是最精确的。但是,由于位置修复精确度的不确定性,最新的修正位置不一定是最准确的。我们可以通过逻辑来推测较为准确的位置修正。下面几点可以用来评估位置修正的准确度:●检查检索到的位置是不是比估计的明显要新;●检查位置的准确度比估计的的是好还是坏;●检查新位置信息是通过什么方式(GPSorNetwork)获取的示例如下:privatestaticfinalintTWO_MINUTES=1000*60*2;protectedbooleanisBetterLocation(Locationlocation,LocationcurrentBestLocation){if(currentBestLocation==null){//Anewlocationisalwaysbetterthannolocationreturntrue;}//CheckwhetherthenewlocationfixisnewerorolderlongtimeDelta=location.getTime()-currentBestLocation.getTime();booleanisSignificantlyNewer=timeDeltaTWO_MINUTES;booleanisSignificantlyOlder=timeDelta-TWO_MINUTES;booleanisNewer=timeDelta0;if(isSignificantlyNewer){returntrue;//Ifthenewlocationismorethantwominutesolder,itmustbeworse}elseif(isSignificantlyOlder){returnfalse;}//CheckwhetherthenewlocationfixismoreorlessaccurateintaccuracyDelta=(int)(location.getAccuracy()-currentBestLocation.getAccuracy());booleanisLessAccurate=accuracyDelta0;booleanisMoreAccurate=accuracyDelta0;Android位置和地图服务版权保留谢绝转载Byhoyah:hoyah.me@gmail.combooleanisSignificantlyLessAccurate=accuracyDelta200;//CheckiftheoldandnewlocationarefromthesameproviderbooleanisFromSameProvider=isSameProvider(location.getProvider(),currentBestLocation.getProvider());//Determinelocationqualityusingacombinationoftimelinessandaccuracyif(isMoreAccurate){returntrue;}elseif(isNewer&&!isLessAccurate){returntrue;}elseif(isNewer&&!isSignificantlyLessAccurate&&isFromSameProvider){returntrue;}returnfalse;}/**Checkswhethertwoprovidersarethesame*/privatebooleanisSameProvider(Stringprovider1,Stringprovider2){if(provider1==null){returnprovider2==null;}returnprovider1.equals(provider2);}ProvidingProvidingProvidingProvidingMockMockMockMockLocationLocationLocationLocationDataDataDataData在模拟器上调试基于位置的应用时,有三种方法提供模拟位置数据。1、UsingEclipse依次选择WindowWindowWindowWindowShowShowShowSh
本文标题:Android教程之位置与地图服务_by_hoyah
链接地址:https://www.777doc.com/doc-1577812 .html