Android实现GPS定位代码实例

所属分类: 软件编程 / Android 阅读数: 1104
收藏 0 赞 0 分享

通过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
  
 }
};

更多精彩内容其他人还在看

android byte[] 和short[]转换的方法代码

这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取应用程序大小的方法

这篇文章主要介绍了Android获取应用程序大小的方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取其他包的Context实例代码

这篇文章主要介绍了Android获取其他包的Context实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android放大镜的实现代码

这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android 读取Properties配置文件的小例子

这篇文章主要介绍了Android 读取Properties配置文件的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android通讯录开发之删除功能的实现方法

这篇文章主要介绍了Android通讯录开发之删除功能的实现方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享
查看更多