当前位置: 首页 > 科技观察

Android三种定位方式的实现

时间:2023-03-14 16:27:03 科技观察

源码介绍Android、GPS、百度定位、高德定位三种定位方式的实现。源代码运行截图代码片段:publicclassMainActivityextendsActivityimplementsOnClickListener{privateTextViewmTextView;privateButtongpsBtn,baiduBtn,amapBtn;//gpsprivateLocationManagergpsManagerdu;//baidupLocationManagergpsManagerdu;//baidupManagerduvateamapprivateLocationManagerProxyaMapManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView=(TextView)findViewById(R.id.text);gpsBtn=(Button)findViewById(R.id.gps);baiduBtn=(Button)findViewById(R.id.baidu);amapBtn=(Button)findViewById(R.id.amap);gpsBtn.setOnClickListener(this);baiduBtn.setOnClickListener(this);amapBtn.setOnClickListener(this);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.gps:if(gpsBtn.getText().toString().equals("开启GPS定位")){startGps();gpsBtn.setText("停止GPS定位");}else{stopGps();gpsBtn.setText("开启GPS位置");}break;caseR.id.baidu:if(baiduBtn.getText().toString().equals("开启百度定位")){startBaidu();baiduBtn.setText("停止百度定位");}else{stopBaidu();baiduBtn.setText("开启百度定位");}break;caseR.id.amap:if(amapBtn.getText().toString().equals("启用高德定位")){startAmap();amapBtn.setText("停止高德定位");}else{stopAmap();amapBtn.setText("开启高德定位");}break;default:break;}}privatevoidstartAmap(){aMapManager=LocationManagerProxy.getInstance(this);/**mAMapLocManager.setGpsEnable(false);*1.0.2一个新的版本中添加了方法。设置为true表示混合定位包含GPS定位,设置为false表示纯网络定位。默认为trueLocation*API定位采用GPS和网络混合定位*。第一个参数为定位提供者,第二个参数为时间,最短为2000毫秒,第三个参数距离间隔单位为米,第四个参数为位置监听*/aMapManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork,2000,10,mAMapLocationListener);}privatevoidstopAmap(){if(aMapManager!=null){aMapManager.removeUpdates(mAMapLocationListener);aMapManager.destory();}aMapManager=null;}privatevoidstartBaidu(){if(baduduManager==null){baduduManager=newLocationClient(this);//位置配置LocationClientOptionoption=newLocationClientOption();//定位模式选择,高精度,省电,只有设备option.setLocationMode(LocationMode.Hight_Accuracy);//定位坐标系类型选择,gcj02,bd09ll,bd09option.setCoorType("gcj02");//定位时间间隔option.setScanSpan(1000);//选择定位地址option.setIsNeedAddress(true);baduduManager.setLocOption(option);//注册定位成功回调baduduManager.registerLocationListener(mBdLocationListener);}baduduManager.start();}privatevoidstopBaidu(){baduduManager.stop();}privatevoidstartGps(){//获取LocationManager对象gpsManager=(LocationManager)getSystemService(LOCATION_SERVICE);//provider可以是GPS定位,也可以是基站站和WIFI定位Stringprovider=gpsManager.getProvider(LocationManager.GPS_PROVIDER).getName();//3000ms为定位间隔,10m为距离变化阈值,gpsListener为回调接口gpsManager.requestLocationUpdates(provider,3000,10,全球定位系统侦听器);}privatevoidstopGps(){gpsManager.removeUpdates(gpsListener);}//创建位置监听器privateLocationListenergpsListener=newLocationListener(){//调用@OverridepublicvoidonLocationChanged(Locationlocation){Log.e("Location","onLocationChanged");doublelatitude=location.getLatitude();doublelongitude=location.getLongitude();floatspeed=location.getSpeed();longtime=location.getTime();Strings="latitude--->"+latitude+"longitude--->"+longitude+"speed--->"+speed+"time--->"+newDate(time).toLocaleString();mTextView.setText("GPS定位\n"+s);}//provider失效时调用@OverridepublicvoidonProviderDisabled(Stringprovider){Log.e("Location","onProviderDisabled");}//provider失效时调用@OverridepublicvoidonProviderEnabled(Stringprovider){Log.e("Location","onProviderEnabled");}//状态改变时调用@OverridepublicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){Log.e("Location","onStatusChanged");}};privateBDLocationListenermBdLocationListener=newBDLocationListener(){@OverridepublicvoidonReceiveLocation(BDLocationlocation){//Receive=LocationStringBuffers[256];sb.append("time:");sb.append(location.getTime());sb.append("\nerrorcode:");sb.append(location.getLocType());sb.append("\nlatitude:");sb.append(location.getLatitude());sb.append("\nlontitude:");sb.append(location.getLongitude());sb.append("\nradius:");sb.append(location.getRadius());if(location.getLocType()==BDLocation.TypeGpsLocation){sb.append("\nspeed:");sb.append(location.getSpeed());sb.append("\nsatellite:");sb.append(location.getSatelliteNumber());sb.append("\ndirection:");sb.append("\naddr:");sb.append(location.getAddrStr());sb.追加(location.getDirection());}elseif(location.getLocType()==BDLocation.TypeNetWorkLocation){sb.append(“\naddr:”);sb.append(location.getAddrStr());sb.append("\noperationers:");sb.append(location.getOperators());}mTextView.setText("百度定位\n"+sb.toString());}};privateAMapLocationListenermAMapLocationListener=newAMapLocationListener(){@OverridepublicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}@OverridepublicvoidonProviderEnabled(Stringprovider){}@OverridepublicvoidonProviderDisabled(Stringprovider){}@OverridepublicvoidonLocationChanged(位置位置){}@OverridepublicvoidonLocationChanged(AMapLocationlocation){if(location!=null)){DoublegeoLat=location.getLatitude();DoublegeoLng=location.getLongitude();StringcityCode="";Stringdesc="";BundlelocBundle=location.getExtras();if(locBundle!=null){cityCode=locBundle.getString("citycode");desc=locBundle.getString("desc");}Stringstr=("定位成功:("+geoLng+","+geoLat+")"+"\n精度:"+location.getAccuracy()+"米"+"\n定位方式:"+location.getProvider()+"\n定位时间:"+newDate(location.getTime()).toLocaleString()+"\n城市编码:"+cityCode+"\n位置描述:"+desc+"\n省:"+location.getProvince()+"\n城市:"+location.getCity()+"\n区(县):"+location.getDistrict()+"\n区号:"+location.getAdCode());mTextView.setText("高德定位\n"+str);}}};}来源链接:http://down.51cto.com/data/1968757