import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private LocationManager lm;
private MyListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取位置管理服务
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
//查询条件
Criteria criteria = new Criteria();
//参数 ACCURACY_FINE:精确 ACCURACY_HIGH:比较精确 误差小于100 ACCURACY_LOW:误差小于500米 ACCURACY_MEDIUM:误差在100-500米 ACCURACY_COARSE:初略的位置
criteria.setAccuracy(Criteria.ACCURACY_FINE);//精确定位
//获取海拔信息
criteria.setAltitudeRequired(true);
//设置用电量为高级别
criteria.setPowerRequirement(Criteria.POWER_HIGH);
//网络定位的时候设置,表示是否话费费用
criteria.setCostAllowed(true);
String provider = lm.getBestProvider(criteria , true);//第二个参数表示 返回可用的定位信息 因为定位功能可能被关闭,被关闭的话就不可用了
System.out.println("provider--->"+provider);
/**
* 获取用户位置
* 1.用哪种方法定位,这里的provider是由上面获取的,系统自己计算出用哪个方法定位最好
* 2.两次获取位置信息之间的间隔(推荐大于60秒 也就是600000 设置为0表示不关心时间 只要能得到位置信息就获取)
* 3.每隔几米获取一次位置信息 0表示不关心 只要能获取到位置信息就获取
*/
listener = new MyListener();
lm.requestLocationUpdates(provider, 100, 1, listener);
}
private class MyListener implements LocationListener{
//当位置变化的时候调用该方法
public void onLocationChanged(Location location) {
float accuracy = location.getAccuracy();//精确度
double latitude = location.getLatitude();//纬度
double longitude = location.getLongitude();//经度
TextView tv = new TextView(getApplicationContext());
tv.setText("精确度-->"+accuracy+"\n纬度-->"+latitude+"\n经度-->"+longitude);
setContentView(tv);
}
//当位置提供者不可用的时候调用该方法 例如用户将定位功能手动关闭的时候
public void onStatusChanged(String provider, int status, Bundle extras) {
}
//当位置提供者可用的时候调用该方法
public void onProviderEnabled(String provider) {
}
//当状态发生改变的时候调用该方法 可用--->不可用 不可用--->可用
public void onProviderDisabled(String provider) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
lm.removeUpdates(listener);//在关闭界面的时候,取消位置监听
}
}