package com.sea.chapter8_1;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class GPSPractice extends Activity {
private TextView mTextView;
private LocationManager mLocationManager;
private LocationProvider mLocationProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gps1);
mTextView = (TextView) findViewById(R.id.gps_textview);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// 返回所有的location提供者的名字的list ,一般有gps,network可以作位置提供者
List<String> list = mLocationManager.getAllProviders();
StringBuffer buffer = new StringBuffer("定位提供者:\n");
for (String li : list) {
buffer.append(" " + li + "\n");
}
mTextView.setText(buffer.toString());
// 根据指定的名字返回一个locationProvider 作为内容提供者,具体怎样获得还是由mLocationManager设置
mLocationProvider = mLocationManager
.getProvider(LocationManager.GPS_PROVIDER); // 由gps做location提供者
// //由系统决定获取位置的方式:gps和网络
// // 创建一个criteria对象
// Criteria criteria = new Criteria();
// // 设置经纬度的精准度,可选参数有ACCURACY_FINE准确或ACCURACY_COARSE粗略
// criteria.setAccuracy(Criteria.ACCURACY_FINE);
// // 设置是否需要获取海拔数据
// criteria.setAltitudeRequired(false);
// // 设置是否需要获得方向信息
// criteria.setBearingRequired(false);
// // 设置是否允许定位过程中产生资费,比如流量等
// criteria.setCostAllowed(true);
// // 设置耗电量的级别
// criteria.setPowerRequirement(Criteria.POWER_LOW);
// // 返回满足给定的criteria(标准)的最佳provider
// String provider = locationManager.getBestProvider(criteria, true);
// mLocationProvider =
// mLocationManager.getProvider(LocationManager.NETWORK_PROVIDER);
// //由网络做location提供者
// mLocationProvider =
// mLocationManager.getProvider(LocationManager.PASSIVE_PROVIDER);
// //与其他应用一起使用,其他应用做location提供者
update();
LocationListener mLocationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
update();
Toast.makeText(getApplicationContext(), " 位置信息已更新……", 3000)
.show();
}
};
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
mLocationManager.requestLocationUpdates(mLocationManager.GPS_PROVIDER,
3 * 1000, 500, mLocationListener);
Toast.makeText(getApplicationContext(), " ok", 3000).show();
}
protected void update() {
// 这里还有一个类,判断最好的提供者
// //上一次的位置信息
// Location mLocation = new Location(mLocationProvider.getName()); //
// 获取一个location对象// 接下来通过locationProvider获取location ,定位信息由location提供
Location mLocation = mLocationManager
.getLastKnownLocation(mLocationProvider.getName()); // 如果要不停地更新,需要使用这个方法,location由manager设置
double altitude = mLocation.getAltitude(); // 定位信息的高度
float bear = mLocation.getBearing(); // 获取定位信息的方向
double latitude = mLocation.getLatitude(); // 获取定位信息的纬度信息
double longitude = mLocation.getLongitude(); // 获取定位信息的经度信息
String provider = mLocation.getProvider(); // 定位信息的提供者
float speed = mLocation.getSpeed(); // 速度
TextView show = (TextView) findViewById(R.id.gps_textview1);
show.setText("高度:" + altitude + "\n方向:" + bear + "\n纬度:" + latitude
+ "\n经度:" + longitude + "\n提供者:" + provider + "\n速度:" + speed);
}
}