package cn.twle.android.gpsupdate;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Message;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
public class MainActivity extends AppCompatActivity {
private LocationManager lm;
private TextView ms_msg;
private String loc_msg;
private Handler handler = new Handler(new Handler.Callback(){
@Override
public boolean handleMessage(Message msg) {
if ( msg.what == 0x001 ) {
ms_msg.setText(loc_msg);
}
return false;
}
});
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 当GPS定位信息发生改变时,更新定位
updateShow(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
// 如果没权限,打开设置页面让用户自己设置
if ( checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "请打开GPS~", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 0);
return;
}
// 当GPS LocationProvider可用时,更新定位
updateShow(lm.getLastKnownLocation(provider));
}
@Override
public void onProviderDisabled(String provider) {
updateShow(null);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ms_msg = (TextView) findViewById(R.id.ms_msg);
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationUpdate();
}
public void onResume() {
super.onResume();
locationUpdate();
}
public void onPause() {
super.onPause();
lm.removeUpdates(mLocationListener);
}
//定义一个更新显示的方法
private void updateShow(Location location) {
if (location != null) {
StringBuilder sb = new StringBuilder();
sb.append("当前的位置信息:\n");
sb.append("精度:" + location.getLongitude() + "\n");
sb.append("纬度:" + location.getLatitude() + "\n");
sb.append("高度:" + location.getAltitude() + "\n");
sb.append("速度:" + location.getSpeed() + "\n");
sb.append("方向:" + location.getBearing() + "\n");
sb.append("定位精度:" + location.getAccuracy() + "\n");
loc_msg = sb.toString();
} else loc_msg = "";
handler.sendEmptyMessage(0x001);
}
public void locationUpdate() {
// 如果没权限,打开设置页面让用户自己设置
if ( checkCallingOrSelfPermission(ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "请打开GPS~", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 0);
return;
}
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateShow(location);
// 设置间隔两秒获得一次 GPS 定位信息
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8,mLocationListener);
}
}