Android实现GPS定位代码实例
通过GPS取得的是一个Location类型的经纬度,可以转换为两个Double纬度和经度.
纬度:23.223871812820435
纬度:113.58986039161628
首先创建一个TextView和两个Button
<TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/btnStart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="定位"/> <Button android:id="@+id/btnStop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止"/>
然后添加主Activity的代码
Location是存放经纬度的一个类型
LocationManager是位置管理服务类型
privateButtonbtnStart; privateButtonbtnStop; privateTextViewtextView; privateLocationmLocation; privateLocationManagermLocationManager; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnStart=(Button)findViewById(R.id.btnStart); btnStop=(Button)findViewById(R.id.btnStop); textView=(TextView)findViewById(R.id.text); btnStart.setOnClickListener(btnClickListener);//开始定位 btnStop.setOnClickListener(btnClickListener);//结束定位按钮 } gpsIsOpen是自己写的查看当前GPS是否开启 getLocation是自己写的一个获取定位信息的方法 mLocationManager.removeUpdates()是停止当前的GPS位置监听 publicButton.OnClickListenerbtnClickListener=newButton.OnClickListener() { publicvoidonClick(Viewv) { Buttonbtn=(Button)v; if(btn.getId()==R.id.btnStart) { if(!gpsIsOpen()) return; mLocation=getLocation(); if(mLocation!=null) textView.setText("维度:"+mLocation.getLatitude()+"\n经度:"+mLocation.getLongitude()); else textView.setText("获取不到数据"); } elseif(btn.getId()==R.id.btnStop) { mLocationManager.removeUpdates(locationListener); } } }; privatebooleangpsIsOpen() { booleanbRet=true; LocationManageralm=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); if(!alm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(this,"未开启GPS",Toast.LENGTH_SHORT).show(); bRet=false; } else { Toast.makeText(this,"GPS已开启",Toast.LENGTH_SHORT).show(); } returnbRet; } 判断当前是否开启GPS privatebooleangpsIsOpen() { booleanbRet=true; LocationManageralm=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); if(!alm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(this,"未开启GPS",Toast.LENGTH_SHORT).show(); bRet=false; } else { Toast.makeText(this,"GPS已开启",Toast.LENGTH_SHORT).show(); } returnbRet; } 该方法获取当前的经纬度,第一次获取总是null 后面从LocationListener获取已改变的位置 mLocationManager.requestLocationUpdates()是开启一个LocationListener等待位置变化 privateLocationgetLocation() { //获取位置管理服务 mLocationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); //查找服务信息 Criteriacriteria=newCriteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);//定位精度:最高 criteria.setAltitudeRequired(false);//海拔信息:不需要 criteria.setBearingRequired(false);//方位信息:不需要 criteria.setCostAllowed(true);//是否允许付费 criteria.setPowerRequirement(Criteria.POWER_LOW);//耗电量:低功耗 Stringprovider=mLocationManager.getBestProvider(criteria,true);//获取GPS信息 Locationlocation=mLocationManager.getLastKnownLocation(provider); mLocationManager.requestLocationUpdates(provider,2000,5,locationListener); returnlocation; } 改方法是等待GPS位置改变后得到新的经纬度 privatefinalLocationListenerlocationListener=newLocationListener() { publicvoidonLocationChanged(Locationlocation) { //TODOAuto-generatedmethodstub if(location!=null) textView.setText("维度:"+location.getLatitude()+"\n经度:" +location.getLongitude()); else textView.setText("获取不到数据"+Integer.toString(nCount)); } publicvoidonProviderDisabled(Stringprovider) { //TODOAuto-generatedmethodstub } publicvoidonProviderEnabled(Stringprovider) { //TODOAuto-generatedmethodstub } publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras) { //TODOAuto-generatedmethodstub } };