初始化
This commit is contained in:
+150
@@ -0,0 +1,150 @@
|
||||
package com.arpa.hndahesudintocctmsdriver.util.location;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
import com.amap.api.location.AMapLocation;
|
||||
import com.amap.api.location.AMapLocationClient;
|
||||
import com.amap.api.location.AMapLocationClientOption;
|
||||
import com.amap.api.location.AMapLocationListener;
|
||||
import com.arpa.hndahesudintocctmsdriver.util.msg.MsgUtil;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author hlh
|
||||
* @version 1.0.0
|
||||
* @date 2021/8/13 16:13
|
||||
* @description:高德地图定位
|
||||
*/
|
||||
public class LocationGDUtil {
|
||||
|
||||
public final static int RES=14;
|
||||
private double latitude;
|
||||
private double longitude;
|
||||
private String address;
|
||||
|
||||
public double getLatitude() {
|
||||
return latitude;
|
||||
}
|
||||
|
||||
public double getLongitude() {
|
||||
return longitude;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
private Context con;
|
||||
private Handler hd;
|
||||
//声明AMapLocationClient类对象
|
||||
public AMapLocationClient mLocationClient = null;
|
||||
//声明AMapLocationClientOption对象
|
||||
public AMapLocationClientOption mLocationOption = null;
|
||||
//声明定位回调监听器
|
||||
|
||||
public AMapLocationListener mLocationListener = new AMapLocationListener() {
|
||||
@Override
|
||||
public void onLocationChanged(AMapLocation aMapLocation) {
|
||||
if (aMapLocation != null) {
|
||||
if (aMapLocation.getErrorCode() == 0) {
|
||||
//可在其中解析amapLocation获取相应内容。
|
||||
Log.e("x经纬度gd",aMapLocation.getLatitude()+"-----");
|
||||
aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
|
||||
latitude=aMapLocation.getLatitude();//获取纬度
|
||||
longitude=aMapLocation.getLongitude();//获取经度
|
||||
aMapLocation.getAccuracy();//获取精度信息
|
||||
address=aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
|
||||
aMapLocation.getCountry();//国家信息
|
||||
aMapLocation.getProvince();//省信息
|
||||
aMapLocation.getCity();//城市信息
|
||||
aMapLocation.getDistrict();//城区信息
|
||||
aMapLocation.getStreet();//街道信息
|
||||
aMapLocation.getStreetNum();//街道门牌号信息
|
||||
aMapLocation.getCityCode();//城市编码
|
||||
aMapLocation.getAdCode();//地区编码
|
||||
aMapLocation.getAoiName();//获取当前定位点的AOI信息
|
||||
aMapLocation.getBuildingId();//获取当前室内定位的建筑物Id
|
||||
aMapLocation.getFloor();//获取当前室内定位的楼层
|
||||
aMapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
|
||||
//获取定位时间
|
||||
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
Date date = new Date(aMapLocation.getTime());
|
||||
df.format(date);
|
||||
MsgUtil.addHdMsgWat(hd,RES);
|
||||
if (mLocationClient!=null) {
|
||||
mLocationClient.onDestroy();
|
||||
}
|
||||
}else {
|
||||
MsgUtil.addHdMsgWat(hd,16);
|
||||
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
|
||||
Log.e("AmapError","location Error, ErrCode:"
|
||||
+ aMapLocation.getErrorCode() + ", errInfo:"
|
||||
+ aMapLocation.getErrorInfo());
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public LocationGDUtil(Context con,Handler hd) {
|
||||
this.con = con;
|
||||
this.hd=hd;
|
||||
}
|
||||
|
||||
public void onCreate(){
|
||||
// AMapLocationClient.updatePrivacyShow(con,true,true);
|
||||
// AMapLocationClient.updatePrivacyAgree(con,true);
|
||||
//初始化定位
|
||||
try {
|
||||
mLocationClient = new AMapLocationClient(con.getApplicationContext());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//设置定位回调监听
|
||||
mLocationClient.setLocationListener(mLocationListener);
|
||||
//初始化AMapLocationClientOption对象
|
||||
mLocationOption = new AMapLocationClientOption();
|
||||
AMapLocationClientOption option = new AMapLocationClientOption();
|
||||
/**
|
||||
* 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)
|
||||
*/
|
||||
option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
|
||||
if(null != mLocationClient){
|
||||
mLocationClient.setLocationOption(option);
|
||||
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
|
||||
mLocationClient.stopLocation();
|
||||
mLocationClient.startLocation();
|
||||
}
|
||||
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
|
||||
//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
|
||||
//设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。
|
||||
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
|
||||
//设置定位模式为AMapLocationMode.Device_Sensors,仅设备模式。
|
||||
//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);
|
||||
//获取一次定位结果:
|
||||
//该方法默认为false。
|
||||
mLocationOption.setOnceLocation(true);
|
||||
//获取最近3s内精度最高的一次定位结果:
|
||||
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
|
||||
mLocationOption.setOnceLocationLatest(true);
|
||||
//设置是否返回地址信息(默认返回地址信息)
|
||||
mLocationOption.setNeedAddress(true);
|
||||
//设置是否允许模拟位置,默认为true,允许模拟位置
|
||||
mLocationOption.setMockEnable(true);
|
||||
//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
|
||||
mLocationOption.setHttpTimeOut(20000);
|
||||
//关闭缓存机制
|
||||
mLocationOption.setLocationCacheEnable(false);
|
||||
//给定位客户端对象设置定位参数
|
||||
mLocationClient.setLocationOption(mLocationOption);
|
||||
//启动定位
|
||||
mLocationClient.stopLocation();
|
||||
mLocationClient.startLocation();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package com.arpa.hndahesudintocctmsdriver.util.location;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
import com.arpa.hndahesudintocctmsdriver.util.msg.MsgUtil;
|
||||
import com.baidu.location.BDAbstractLocationListener;
|
||||
import com.baidu.location.BDLocation;
|
||||
import com.baidu.location.LocationClient;
|
||||
import com.baidu.location.LocationClientOption;
|
||||
|
||||
/**
|
||||
* @author hlh
|
||||
* @version 1.0.0
|
||||
* @date 2021/8/13 14:13
|
||||
* @description:定位工具类
|
||||
*/
|
||||
public class LocationUtil{
|
||||
|
||||
private double latitude;
|
||||
private double longitude;
|
||||
private String address;
|
||||
private Context con;
|
||||
private Handler hd;
|
||||
public LocationClient mLocationClient = null;
|
||||
private MyLocationListener myListener = new MyLocationListener();
|
||||
|
||||
public LocationUtil(Context con,Handler hd){
|
||||
this.con=con;
|
||||
this.hd=hd;
|
||||
}
|
||||
|
||||
public double getLatitude() {
|
||||
return latitude;
|
||||
}
|
||||
|
||||
public double getLongitude() {
|
||||
return longitude;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void close(){
|
||||
if(mLocationClient!=null){
|
||||
mLocationClient.stop();
|
||||
}
|
||||
}
|
||||
|
||||
//BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口
|
||||
//原有BDLocationListener接口暂时同步保留。具体介绍请参考后文第四步的说明
|
||||
public void onCreate() {
|
||||
mLocationClient = new LocationClient(con.getApplicationContext());
|
||||
//声明LocationClient类
|
||||
mLocationClient.registerLocationListener(myListener);
|
||||
//注册监听函数
|
||||
LocationClientOption option = new LocationClientOption();
|
||||
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
|
||||
//可选,设置定位模式,默认高精度
|
||||
//LocationMode.Hight_Accuracy:高精度;
|
||||
//LocationMode. Battery_Saving:低功耗;
|
||||
//LocationMode. Device_Sensors:仅使用设备;
|
||||
option.setCoorType("GCJ02");
|
||||
//可选,设置返回经纬度坐标类型,默认GCJ02
|
||||
//GCJ02:国测局坐标;
|
||||
//BD09ll:百度经纬度坐标;
|
||||
//BD09:百度墨卡托坐标;
|
||||
//海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
|
||||
option.setScanSpan(0);
|
||||
//可选,设置发起定位请求的间隔,int类型,单位ms
|
||||
//如果设置为0,则代表单次定位,即仅定位一次,默认为0
|
||||
//如果设置非0,需设置1000ms以上才有效
|
||||
option.setOpenGps(true);
|
||||
//可选,设置是否使用gps,默认false
|
||||
//使用高精度和仅用设备两种定位模式的,参数必须设置为true
|
||||
option.setLocationNotify(true);
|
||||
//可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
|
||||
option.setIgnoreKillProcess(false);
|
||||
//可选,定位SDK内部是一个service,并放到了独立进程。
|
||||
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
|
||||
option.SetIgnoreCacheException(false);
|
||||
//可选,设置是否收集Crash信息,默认收集,即参数为false
|
||||
option.setWifiCacheTimeOut(5*60*1000);
|
||||
//可选,V7.2版本新增能力
|
||||
//如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位
|
||||
option.setEnableSimulateGps(false);
|
||||
option.setIsNeedAddress(true);
|
||||
//可选,是否需要地址信息,默认为不需要,即参数为false
|
||||
//如果开发者需要获得当前点的地址信息,此处必须为true
|
||||
//可选,设置是否需要最新版本的地址信息。默认需要,即参数为true
|
||||
//可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false
|
||||
// option.setNeedNewVersionRgc(true);
|
||||
//可选,设置是否需要最新版本的地址信息。默认需要,即参数为true
|
||||
mLocationClient.setLocOption(option);
|
||||
//mLocationClient为第二步初始化过的LocationClient对象
|
||||
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
|
||||
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
|
||||
mLocationClient.start();
|
||||
}
|
||||
|
||||
public class MyLocationListener extends BDAbstractLocationListener {
|
||||
@Override
|
||||
public void onReceiveLocation(BDLocation location){
|
||||
//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
|
||||
//以下只列举部分获取经纬度相关(常用)的结果信息
|
||||
//更多结果信息获取说明,请参照类参考中BDLocation类中的说明
|
||||
address = location.getAddrStr(); //获取详细地址信息
|
||||
latitude = location.getLatitude(); //获取纬度信息
|
||||
longitude = location.getLongitude(); //获取经度信息
|
||||
float radius = location.getRadius(); //获取定位精度,默认值为0.0f
|
||||
String coorType = location.getCoorType();
|
||||
//获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
|
||||
int errorCode = location.getLocType();
|
||||
//获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
|
||||
Log.e("定位位置address",address+"");
|
||||
Log.e("定位坐标latitude",latitude+"");
|
||||
Log.e("定位坐标longitude",longitude+"");
|
||||
Log.e("返回码latitude",errorCode+"");
|
||||
// if(location.is){
|
||||
//
|
||||
// }
|
||||
MsgUtil.addHdMsgWat(hd,15);
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user