您的位置:首页 > 服装鞋帽 > 女装 > Android中GPS的应用

Android中GPS的应用

luyued 发布于 2011-03-23 21:46   浏览 N 次  

google的GPS提供定位系统,在开发GPS应用是必须要先申请到Android Map API Key。具体的申请方法网上有很多,得到map api key后在布局文件中要添加一个

android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0y4X7jjfqoxq2TR-l1fIHQKxdaNSCy2QDg_GidQ">

其中的apikey的值就是在google上申请到的key。MapView是用来显示google Map的。然后创建一个类,这个类要继承MapActivity。

public class GPS extends MapActivity {
private MapView mapview;
private MapController mapcontroller;
private static final int ZOOM_IN=1;
private static final int ZOOM_OUT=2;

@Override
protected void onCreate(Bundle icicle) {
// TODO Auto-generated method stub
super.onCreate(icicle);
setContentView(R.layout.main);
LocationManager manager;
manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);

mapview=(MapView)findViewById(R.id.mapview);
//设置为交通模式
mapview.setTraffic(true);
//设置为卫星模式
mapview.setSatellite(true);
//设置为街景模式
mapview.setStreetView(false);
mapcontroller=mapview.getController();
mapview.setEnabled(true);
mapview.setClickable(true);
//设置缩放控制,
mapview.displayZoomControls(false);
//设置倍数
mapcontroller.setZoom(17);
//设置Criteria(服务商)的信息,个人的需求
Criteria criteria=new Criteria();
//精度的要求
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//电量
criteria.setPowerRequirement(Criteria.POWER_LOW);
//费用
criteria.setCostAllowed(false);
//提供高度信息。
criteria.setAltitudeRequired(false);
//轴承的信息
criteria.setBearingRequired(false);
//速度
// criteria.setSpeedRequired(false);
String bestprovider=manager.getBestProvider(criteria, true);
Location location=manager.getLastKnownLocation(bestprovider);
UpdateLocation(location);
manager.requestLocationUpdates(bestprovider, 3000, 0,myLocationlistener);
}
private void UpdateLocation(Location location){
StringBuilder sb=null;
if(location!=null){
Double geolat=location.getLatitude()*1E6;
//得到纬度
Double geolong=location.getLongitude()*1E6;
GeoPoint geopoint=new GeoPoint(geolat.intValue(), geolong.intValue());
mapcontroller.animateTo(geopoint);
double latitude=location.getLatitude();
double longitude=location.getLongitude();
Geocoder geocoder=new Geocoder(this, Locale.getDefault());
try {
List addresses=geocoder.getFromLocation(latitude, longitude, 1);
System.out.println("addresses------------>"+addresses);
sb=new StringBuilder();
if(addresses.size()>0){
Address address=addresses.get(0);
for(int i=0;i sb.append(address.getAddressLine(i)).append("\n");
sb.append(address.getLocality()).append("\n");
//返回邮政编码
sb.append(address.getPostalCode()).append("\n");
sb.append(address.getCountryName()).append("\n");
System.out.println(sb.toString());
}
}
} catch (Exception e) {
// TODO: handle exception

}

}else{

}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
menu.add(0, ZOOM_IN, Menu.NONE, "放大");
menu.add(0, ZOOM_OUT, Menu.NONE, "缩小");
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case ZOOM_IN:
mapcontroller.zoomIn();
break;
case ZOOM_OUT:
mapcontroller.zoomOut();
break;
}

return true;
}

private final LocationListener myLocationlistener=new LocationListener() {

//Provider的状态在可用,暂时不可用和无服务三个状态直接切换时触发此函数
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub

}
//Provider启用时触发此函数,比如GPS被打开了

public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

//Provider禁用时触发此函数,比如GPS被关闭了
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
UpdateLocation(null);
}

//当坐标改变时触发此函数
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
UpdateLocation(location);

}
};
}

图文资讯
广告赞助商