这篇文章主要介绍了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是位置管理服务类型
- private Button btnStart;
- private Button btnStop;
- private TextView textView;
- private Location mLocation;
- private LocationManager mLocationManager;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- 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位置监听
- public Button.OnClickListener btnClickListener = new Button.OnClickListener()
- {
- public void onClick(View v)
- {
- Button btn = (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("获取不到数据");
- }
- else if(btn.getId() == R.id.btnStop)
- {
- mLocationManager.removeUpdates(locationListener);
- }
- }
- };
- private boolean gpsIsOpen()
- {
- boolean bRet = true;
- LocationManager alm = (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();
- }
- return bRet;
- }
- 判断当前是否开启GPS
- private boolean gpsIsOpen()
- {
- boolean bRet = true;
- LocationManager alm = (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();
- }
- return bRet;
- }
- 该方法获取当前的经纬度, 第一次获取总是null
- 后面从LocationListener获取已改变的位置
- mLocationManager.requestLocationUpdates()是开启一个LocationListener等待位置变化
- private Location getLocation()
- {
- //获取位置管理服务
- mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
- //查找服务信息
- Criteria criteria = new Criteria();
- criteria.setAccuracy(Criteria.ACCURACY_FINE); //定位精度: 最高
- criteria.setAltitudeRequired(false); //海拔信息:不需要
- criteria.setBearingRequired(false); //方位信息: 不需要
- criteria.setCostAllowed(true); //是否允许付费
- criteria.setPowerRequirement(Criteria.POWER_LOW); //耗电量: 低功耗
- String provider = mLocationManager.getBestProvider(criteria, true); //获取GPS信息
- Location location = mLocationManager.getLastKnownLocation(provider);
- mLocationManager.requestLocationUpdates(provider, 2000, 5, locationListener);
- return location;
- }
- 改方法是等待GPS位置改变后得到新的经纬度
- private final LocationListener locationListener = new LocationListener()
- {
- public void onLocationChanged(Location location)
- {
- // TODO Auto-generated method stub
- if(location != null)
- textView.setText("维度:" + location.getLatitude() + "/n经度:"
- + location.getLongitude());
- else
- textView.setText("获取不到数据" + Integer.toString(nCount));
- }
- public void onProviderDisabled(String provider)
- {
- // TODO Auto-generated method stub
- }
- public void onProviderEnabled(String provider)
- {
- // TODO Auto-generated method stub
- }
- public void onStatusChanged(String provider, int status, Bundle extras)
- {
- // TODO Auto-generated method stub
- }
- };
新闻热点
疑难解答