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

}

};

以上是 Android实现GPS定位代码实例 的全部内容, 来源链接: utcz.com/z/326142.html

回到顶部