中国国行安卓手机使用Google定位服务解决方案
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<meta-data
android:name="GOOGLE_LOCATION_API_KEY"
android:value="YOUR_API_KEY" />
GetLocation.getInstance().setNetworkLocationUrl("https://googleapis.xxxxxx.com/");
GetLocation.getInstance().setMultiLocationListener(new GetLocation.OnMultiLocationListener() {
@Override
public void onMultiLocation(double multilatitude, double multilongitude, long multiupdateTime, float multiaccuracy, float multibearing) {
Double latitude, longitude;
MyLocation myLocation = new MyLocation(multilatitude, multilongitude);
//由于坐标系差异,中国大陆坐标需要转换
if(BoundaryCheck.getInstance().IsInsideChina(myLocation)) {
Point point = CoordinateConversion.wgs_gcj_encrypts(multilatitude, multilongitude);
latitude = point.getLat();
longitude = point.getLng();
}else {
latitude = multilatitude;
longitude = multilongitude;
}
//注意:google网络定位坐标系为WGS84
//经度:longitude,纬度:latitude,精度:multiaccuracy,方位:multiaccuracy,更新时间:multiupdateTime
}
@Override
public void onFailed(int errorCode, String msg) {
}
});
GetLocation.getInstance().startMultiLocation(getApplication(), this, false);
GetLocation.getInstance().setNetworkLocationListener(new GetLocation.OnNetworkLocationListener() {
@Override
public void onNetworkLocation(double latitude, double longitude, long updateTime, float accuracy) {
Double lat, lon;
MyLocation myLocation = new MyLocation(latitude, longitude);
//由于坐标系差异,中国大陆坐标需要转换
if(BoundaryCheck.getInstance().IsInsideChina(myLocation)) {
Point point = CoordinateConversion.wgs_gcj_encrypts(latitude, longitude);
lat = point.getLat();
lon = point.getLng();
}else {
lat = latitude;
lon = longitude;
}
//注意:google网络定位坐标系为WGS84
//经度:longitude,纬度:latitude,精度:accuracy,更新时间:updateTime
}
@Override
public void onFailed(int errorCode, String msg) {
}
});
GetLocation.getInstance().startNetworkLocation(getApplication());
GetLocation.getInstance().setGPSLocationListener(new GetLocation.OnGPSLocationListener() {
@Override
public void onGPSLocation(double latitude, double longitude, long updateTime, float accuracy, float bearing) {
Double lat, lon;
MyLocation myLocation = new MyLocation(latitude, longitude);
//由于坐标系差异,中国大陆坐标需要转换
if(BoundaryCheck.getInstance().IsInsideChina(myLocation)) {
Point point = CoordinateConversion.wgs_gcj_encrypts(latitude, longitude);
lat = point.getLat();
lon = point.getLng();
}else {
lat = latitude;
lon = longitude;
}
//经度:longitude,纬度:latitude,精度:accuracy,方位:accuracy,更新时间:updateTime
}
@Override
public void onFailed(int errorCode, String msg) {
}
});
GetLocation.getInstance().startGPSLocation(getApplication(),this);
无论哪种的定位方式,在activity生命周期stop中一定要释放资源并且停止定位,以防资源浪费和异常奔溃
@Override
protected void onStop() {
super.onStop();
GetLocation.getInstance().onStop();
}