diff --git a/app/build.gradle b/app/build.gradle
index 5ec21b1..4b2f489 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -31,10 +31,6 @@ android {
XG_ACCESS_ID : "1500030457",
XG_ACCESS_KEY: "AZZXANJF4HBD",
]
-
- manifestPlaceholders = [
- AMAP_KEY: "ff08045221483b649cc41e77ee2ad941"
- ]
}
lintOptions {
@@ -83,6 +79,9 @@ android {
MTKAndroid12Release.initWith(release)
MTKAndroid12Release {
signingConfig signingConfigs.mtk12
+ manifestPlaceholders = [
+ Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO"
+ ]
}
MTKAndroid12Debug.initWith(debug)
@@ -90,11 +89,17 @@ android {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.mtk12
+ manifestPlaceholders = [
+ Baidu_AK: "ZauKWLbO0AfHSgR2j3unMkP0MwbBZHxO"
+ ]
}
zhanRuiRelease.initWith(release)
zhanRuiRelease {
signingConfig signingConfigs.zhanRui
+ manifestPlaceholders = [
+ Baidu_AK: "rKsRkc6YbQbHLyiAGCDqukj9ltkU2S7M"
+ ]
}
zhanRuiDebug.initWith(debug)
@@ -102,6 +107,9 @@ android {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.zhanRui
+ manifestPlaceholders = [
+ Baidu_AK: "rKsRkc6YbQbHLyiAGCDqukj9ltkU2S7M"
+ ]
}
debug {
@@ -197,8 +205,8 @@ dependencies {
//bindView
implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
- //高德地图定位
- implementation 'com.amap.api:location:5.1.0'
+ //百度地图
+ implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8'
//MMKV
implementation 'com.tencent:mmkv-static:1.2.14'
implementation 'com.tencent.tpns:tpns:1.3.7.0-release'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8d4e9e5..a44ff12 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -172,15 +172,16 @@
-
-
-
-
+
+ android:name="com.baidu.location.f"
+ android:enabled="true"
+ android:process=":remote" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java b/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java
index c0c65f9..f24b8f7 100644
--- a/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java
+++ b/app/src/main/java/com/uiui/aios/activity/weather/WeatherPresenter.java
@@ -5,7 +5,7 @@ import android.util.Log;
import androidx.annotation.NonNull;
-import com.amap.api.location.AMapLocation;
+import com.baidu.location.BDLocation;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.qweather.sdk.bean.weather.WeatherDailyBean;
@@ -58,10 +58,10 @@ public class WeatherPresenter implements WeatherContact.Presenter {
@Override
public void getLocation() {
- AMapLocation aMapLocation = AmapManager.getInstance().getNowAMapLocation();
+ BDLocation bdLocation = AmapManager.getInstance().getNowMapLocation();
String location = "未知";
- if (aMapLocation != null) {
- location = aMapLocation.getCity() + "\t" + aMapLocation.getDistrict();
+ if (bdLocation != null) {
+ location = bdLocation.getCity() + "\t" + bdLocation.getDistrict();
}
mView.setLocation(location);
}
diff --git a/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java b/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java
index 647ed12..956f3ac 100644
--- a/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java
+++ b/app/src/main/java/com/uiui/aios/fragment/ControlFragment.java
@@ -31,9 +31,9 @@ import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
-import com.amap.api.location.AMapLocation;
-import com.amap.api.location.AMapLocationClient;
-import com.amap.api.location.AMapLocationListener;
+import com.baidu.location.BDAbstractLocationListener;
+import com.baidu.location.BDLocation;
+import com.baidu.location.LocationClient;
import com.uiui.aios.R;
import com.uiui.aios.manager.AmapManager;
import com.uiui.aios.utils.BrightnessUtils;
@@ -737,13 +737,15 @@ public class ControlFragment extends Fragment {
}, 1999);
}
- private AMapLocationClient locationClient;
+ private LocationClient locationClient;
private void getLocation() {
- AMapLocation aMapLocation = AmapManager.getInstance().getNowAMapLocation();
- if (aMapLocation != null) {
- if (aMapLocation.getErrorCode() == 0) {// 离线定位结果
- tv_location.setText(aMapLocation.getAddress());
+ BDLocation bdLocation = AmapManager.getInstance().getNowMapLocation();
+ if (bdLocation != null) {
+ if (bdLocation.getLocType() == BDLocation.TypeGpsLocation // GPS定位结果
+ || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation // 网络定位结果
+ || bdLocation.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
+ tv_location.setText(bdLocation.getAddrStr());
} else {
tv_location.setText("未知");
}
@@ -763,15 +765,20 @@ public class ControlFragment extends Fragment {
if (locationClient == null) {
locationClient = AmapManager.getInstance().getLocationClient();
}
- locationClient.stopLocation();
- locationClient.startLocation();
- locationClient.setLocationListener(new AMapLocationListener() {
+ locationClient.stop();
+ locationClient.start();
+ locationClient.registerLocationListener(new BDAbstractLocationListener() {
@Override
- public void onLocationChanged(AMapLocation aMapLocation) {
- if (aMapLocation.getErrorCode() == 0) {
- tv_location.setText(aMapLocation.getAddress());
- } else {
- tv_location.setText("定位失败");
+ public void onReceiveLocation(BDLocation bdLocation) {
+ switch (bdLocation.getLocType()) {
+ case BDLocation.TypeGpsLocation:// GPS定位结果
+ case BDLocation.TypeNetWorkLocation:// 网络定位结果
+ case BDLocation.TypeOffLineLocation:// 离线定位结果
+ tv_location.setText(bdLocation.getAddrStr());
+ break;
+ default:
+ tv_location.setText("定位失败");
+ break;
}
}
});
diff --git a/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java b/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java
index df41dd2..52429e1 100644
--- a/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java
+++ b/app/src/main/java/com/uiui/aios/fragment/custom/CustomFragment.java
@@ -28,8 +28,9 @@ import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import com.amap.api.location.AMapLocation;
-import com.amap.api.location.AMapLocationListener;
+import com.baidu.location.BDAbstractLocationListener;
+import com.baidu.location.BDLocation;
+import com.baidu.location.LocationClient;
import com.blankj.utilcode.util.NetworkUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
@@ -667,15 +668,25 @@ public class CustomFragment extends BaseFragment implements CustomContact.Custom
}
private void initAmap() {
- AmapManager.getInstance().startLocation(new AMapLocationListener() {
+ LocationClient locationClient = AmapManager.getInstance().getLocationClient();
+ locationClient.stop();
+ locationClient.start();
+ locationClient.registerLocationListener(new BDAbstractLocationListener() {
@Override
- public void onLocationChanged(AMapLocation aMapLocation) {
- if (aMapLocation.getErrorCode() == 0) {
- String city = aMapLocation.getCity();
- tv_location.setText(city);
- getweather(aMapLocation.getLongitude(), aMapLocation.getLatitude());
- } else {
-
+ public void onReceiveLocation(BDLocation bdLocation) {
+ Log.e(TAG, "onReceiveLocation: ");
+ switch (bdLocation.getLocType()) {
+ case BDLocation.TypeGpsLocation:// GPS定位结果
+ case BDLocation.TypeNetWorkLocation:// 网络定位结果
+ case BDLocation.TypeOffLineLocation:// 离线定位结果
+ String city = bdLocation.getCity();
+ tv_location.setText(city);
+ getweather(bdLocation.getLongitude(), bdLocation.getLatitude());
+ break;
+ default:
+ BDLocation location = AmapManager.getInstance().getNowMapLocation();
+ getweather(location.getLongitude(), location.getLatitude());
+ break;
}
}
});
diff --git a/app/src/main/java/com/uiui/aios/manager/AmapManager.java b/app/src/main/java/com/uiui/aios/manager/AmapManager.java
index 95dd435..39f6e69 100644
--- a/app/src/main/java/com/uiui/aios/manager/AmapManager.java
+++ b/app/src/main/java/com/uiui/aios/manager/AmapManager.java
@@ -2,38 +2,51 @@ package com.uiui.aios.manager;
import android.annotation.SuppressLint;
import android.content.Context;
+import android.provider.Settings;
+import android.text.TextUtils;
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.blankj.utilcode.util.SPUtils;
+import com.baidu.location.BDAbstractLocationListener;
+import com.baidu.location.BDLocation;
+import com.baidu.location.LocationClient;
+import com.baidu.location.LocationClientOption;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.tencent.mmkv.MMKV;
+import com.uiui.aios.disklrucache.CacheHelper;
+import com.uiui.aios.utils.GsonUtils;
import java.lang.reflect.Type;
public class AmapManager {
- private String TAG = AmapManager.class.getSimpleName();
- private static final String AMAPLOCATION_JSON_KEY = "AMAPLOCATION_JSON_STRING";
- public static final String LONGITUDE_KEY = "amap_longitude_key";
- public static final String LATITUDE_KEY = "amap_latitude_key";
- public static final String ADDRESS_KEY = "amap_address_key";
+ private static final String TAG = AmapManager.class.getSimpleName();
@SuppressLint("StaticFieldLeak")
private static AmapManager sInstance;
private Context mContext;
- private MMKV mMMKV = MMKV.defaultMMKV();
+ @SuppressLint("StaticFieldLeak")
+ private LocationClient mLocationClient = null;
+ private LocationClientOption mOption;
+ private BDLocation mLocation;
+ private CacheHelper mCacheHelper;
+ private MMKV mmkv = MMKV.defaultMMKV();
- private AMapLocationClient locationClient = null;
- private AMapLocation nowAMapLocation;
+ private static final String AMAPLOCATION_JSON_KEY = "MAPLOCATION_JSON_STRING";
+ public static final String LONGITUDE_KEY = "map_longitude_key";
+ public static final String LATITUDE_KEY = "map_latitude_key";
+ public static final String ADDRESS_KEY = "map_address_key";
+ public static final String ERROR_KEY = "map_error_key";
private AmapManager(Context context) {
this.mContext = context;
+ this.mCacheHelper = new CacheHelper(context);
+ Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+gps");
+ initAmap();
}
public static void init(Context context) {
+ if (context == null) {
+ throw new RuntimeException("Context is NULL");
+ }
if (sInstance == null) {
sInstance = new AmapManager(context);
}
@@ -43,100 +56,355 @@ public class AmapManager {
if (sInstance == null) {
throw new IllegalStateException("You must be init AmapManager first");
}
-
return sInstance;
}
- public AMapLocationClient getLocationClient() {
- if (null == locationClient) {
+ public void initAmap() {
+ if (mLocationClient == null) {
+ mLocationClient = new LocationClient(mContext);
+ }
+ Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "+gps");
+ mLocationClient.setLocOption(getDefaultLocationClientOption());
+ mLocationClient.registerLocationListener(mListener);
+ mLocationClient.stop();
+ mLocationClient.start();
+ }
+
+
+ public LocationClient getLocationClient() {
+ if (mLocationClient == null) {
initAmap();
}
- return locationClient;
+ return mLocationClient;
}
- public void initAmap() {
- locationClient = new AMapLocationClient(mContext);
- AMapLocationClientOption option = new AMapLocationClientOption();
- option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
- option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
- option.setNeedAddress(true);
- //获取一次定位结果:
- //该方法默认为false。
- option.setOnceLocation(true);
- //获取最近3s内精度最高的一次定位结果:
- //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
- // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
- option.setOnceLocationLatest(true);
- locationClient.setLocationOption(option);
- //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
- //设置定位监听
- locationClient.setLocationListener(new AMapLocationListener() {
- @Override
- public void onLocationChanged(AMapLocation aMapLocation) {
- //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
- if (aMapLocation.getErrorCode() == 0) {
- Log.e(TAG, "onLocationChanged: " + "定位成功");
- Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
- Log.e(TAG, "onLocationChanged: getLongitude = " + aMapLocation.getLongitude());
- mMMKV.encode(LONGITUDE_KEY, String.valueOf(aMapLocation.getLongitude()));
- Log.e(TAG, "onLocationChanged: getLatitude = " + aMapLocation.getLatitude());
- mMMKV.encode(LATITUDE_KEY, String.valueOf(aMapLocation.getLatitude()));
- Log.e(TAG, "onLocationChanged: getAddress = " + aMapLocation.getAddress());
- mMMKV.encode(ADDRESS_KEY, aMapLocation.getAddress());
- } else {
- //定位失败
- Log.e(TAG, "onLocationChanged: " + "定位失败");
- Log.e(TAG, "onLocationChanged: " + aMapLocation.getErrorInfo());
- }
+ public BDLocation getNowMapLocation() {
+ if (mLocation == null) {
+ String aMapLocationjson = mmkv.decodeString(AMAPLOCATION_JSON_KEY);
+ if (TextUtils.isEmpty(aMapLocationjson)) {
+ return null;
}
- });
- //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
- locationClient.stopLocation();
- locationClient.startLocation();
- Log.e(TAG, "initAmap: " + "startLocation");
- }
-
- public AMapLocation getNowAMapLocation() {
- if (nowAMapLocation == null) {
- String aMapLocationjson = SPUtils.getInstance().getString(AMAPLOCATION_JSON_KEY, "");
- Type type = new TypeToken() {
+ Type type = new TypeToken() {
}.getType();
- AMapLocation aMapLocation = new Gson().fromJson(aMapLocationjson, type);
- return aMapLocation;
- }
- return this.nowAMapLocation;
- }
-
- public void startLocation(AMapLocationListener aMapLocationListener) {
- initAmap();
- locationClient.stopLocation();
- locationClient.startLocation();
- locationClient.setLocationListener(new AMapLocationListener() {
- @Override
- public void onLocationChanged(AMapLocation aMapLocation) {
- Log.d(TAG, "onLocationChanged: " + aMapLocation.toStr());
- if (aMapLocation.getErrorCode() == 0) {
- nowAMapLocation = aMapLocation;
- SPUtils.getInstance().put(AMAPLOCATION_JSON_KEY, aMapLocation.toStr());
- mMMKV.encode(LONGITUDE_KEY, String.valueOf(aMapLocation.getLongitude()));
- mMMKV.encode(LATITUDE_KEY, String.valueOf(aMapLocation.getLatitude()));
- mMMKV.encode(ADDRESS_KEY, aMapLocation.getAddress());
- } else {
- SPUtils.getInstance().put(AMAPLOCATION_JSON_KEY, "");
- }
- aMapLocationListener.onLocationChanged(aMapLocation);
+ try {
+ BDLocation bdLocation = new Gson().fromJson(aMapLocationjson, type);
+ return bdLocation;
+ } catch (Exception e) {
+ Log.e(TAG, "getNowMapLocation: " + e.getMessage());
+ return null;
}
- });
+ }
+ return this.mLocation;
}
public String getLocation() {
- AMapLocation aMapLocation = getNowAMapLocation();
- if (aMapLocation == null) {
+ BDLocation bdLocation = getNowMapLocation();
+ if (bdLocation == null) {
return "0,0";
} else {
- String location = aMapLocation.getLongitude() + "," + aMapLocation.getLatitude();
+ String location = bdLocation.getLongitude() + "," + bdLocation.getLatitude();
Log.e(TAG, "getLocation: " + location);
return location;
}
}
+
+
+ /***
+ *
+ * @return DefaultLocationClientOption 默认O设置
+ */
+ public LocationClientOption getDefaultLocationClientOption() {
+ if (mOption == null) {
+ mOption = new LocationClientOption();
+ mOption.setCoorType("bd09ll"); // 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
+ mOption.setScanSpan(0); // 可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
+ mOption.setIsNeedAddress(true); // 可选,设置是否需要地址信息,默认不需要
+ mOption.setIsNeedLocationDescribe(true); // 可选,设置是否需要地址描述
+ mOption.setNeedDeviceDirect(false); // 可选,设置是否需要设备方向结果
+ mOption.setLocationNotify(false); // 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
+ mOption.setIgnoreKillProcess(true); // 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop
+ mOption.setIsNeedLocationDescribe(true); // 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation
+ mOption.setIsNeedLocationPoiList(true); // 可选,默认false,设置是否需要POI结果,可以在BDLocation
+ mOption.SetIgnoreCacheException(false); // 可选,默认false,设置是否收集CRASH信息,默认收集
+ mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备,模糊
+ mOption.setIsNeedAltitude(false); // 可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
+ // 可选,设置首次定位时选择定位速度优先还是定位准确性优先,默认为速度优先
+// mOption.setFirstLocType(LocationClientOption.FirstLocType.SPEED_IN_FIRST_LOC);
+ }
+ return mOption;
+ }
+
+
+ /*****
+ *
+ * 定位结果回调,重写onReceiveLocation方法,可以直接拷贝如下代码到自己工程中修改
+ *
+ */
+ private BDAbstractLocationListener mListener = new BDAbstractLocationListener() {
+
+ /**
+ * 定位请求回调函数
+ * @param location 定位结果
+ */
+ @Override
+ public void onReceiveLocation(BDLocation location) {
+ if (null != location) {
+ switch (location.getLocType()) {
+ case BDLocation.TypeGpsLocation:// GPS定位结果
+ case BDLocation.TypeNetWorkLocation:// 网络定位结果
+ case BDLocation.TypeOffLineLocation:// 离线定位结果
+ mmkv.encode(AMAPLOCATION_JSON_KEY, GsonUtils.toJsonString(location));
+ Log.e(TAG, "onLocationChanged: " + "定位成功");
+ Log.e(TAG, "onLocationChanged: longitude = " + location.getLongitude());
+ Log.e(TAG, "onLocationChanged: latitude = " + location.getLatitude());
+ Log.e(TAG, "onLocationChanged: " + location.getAddrStr() + location.getLocationDescribe());
+ mCacheHelper.put(ADDRESS_KEY, location.getAddrStr() + location.getLocationDescribe());
+ mCacheHelper.put(LONGITUDE_KEY, location.getLongitude());
+ mCacheHelper.put(LATITUDE_KEY, location.getLatitude());
+ mCacheHelper.put(ERROR_KEY, "-");
+ break;
+ case BDLocation.TypeServerError:
+ Log.e(TAG, "onReceiveLocation: " + "服务端网络定位失败");
+ mCacheHelper.put(ERROR_KEY, "服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
+ break;
+ case BDLocation.TypeNetWorkException:
+ Log.e(TAG, "onReceiveLocation: " + "网络不同导致定位失败,请检查网络是否通畅");
+ mCacheHelper.put(ERROR_KEY, "网络不同导致定位失败,请检查网络是否通畅");
+ break;
+ case BDLocation.TypeCriteriaException:
+ Log.e(TAG, "onReceiveLocation: " + "无法获取有效定位依据导致定位失败");
+ mCacheHelper.put(ERROR_KEY, "无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
+ break;
+ default:
+ }
+ }
+// if (null != location && location.getLocType() != BDLocation.TypeServerError) {
+// StringBuffer sb = new StringBuffer(256);
+// sb.append("time : ");
+// /**
+// * 时间也可以使用systemClock.elapsedRealtime()方法 获取的是自从开机以来,每次回调的时间;
+// * location.getTime() 是指服务端出本次结果的时间,如果位置不发生变化,则时间不变
+// */
+// sb.append(location.getTime());
+// sb.append("\nsysTime : ");
+// sb.append(SystemClock.elapsedRealtime());
+// sb.append("\nlocType : ");// 定位类型
+// sb.append(location.getLocType());
+// sb.append("\nlocType description : ");// *****对应的定位类型说明*****
+// sb.append(location.getLocTypeDescription());
+// sb.append("\nlatitude : ");// 纬度
+// sb.append(location.getLatitude());
+// sb.append("\nlongtitude : ");// 经度
+// sb.append(location.getLongitude());
+// sb.append("\nradius : ");// 半径
+// sb.append(location.getRadius());
+// sb.append("\nCountryCode : ");// 国家码
+// sb.append(location.getCountryCode());
+// sb.append("\nProvince : ");// 获取省份
+// sb.append(location.getProvince());
+// sb.append("\nCountry : ");// 国家名称
+// sb.append(location.getCountry());
+// sb.append("\ncitycode : ");// 城市编码
+// sb.append(location.getCityCode());
+// sb.append("\ncity : ");// 城市
+// sb.append(location.getCity());
+// sb.append("\nDistrict : ");// 区
+// sb.append(location.getDistrict());
+// sb.append("\nTown : ");// 获取镇信息
+// sb.append(location.getTown());
+// sb.append("\nStreet : ");// 街道
+// sb.append(location.getStreet());
+// sb.append("\naddr : ");// 地址信息
+// sb.append(location.getAddrStr());
+// sb.append("\nStreetNumber : ");// 获取街道号码
+// sb.append(location.getStreetNumber());
+// sb.append("\nUserIndoorState: ");// *****返回用户室内外判断结果*****
+// sb.append(location.getUserIndoorState());
+// sb.append("\nDirection(not all devices have value): ");
+// sb.append(location.getDirection());// 方向
+// sb.append("\nlocationdescribe: ");
+// sb.append(location.getLocationDescribe());// 位置语义化信息
+// sb.append("\nPoi: ");// POI信息
+// if (location.getPoiList() != null && !location.getPoiList().isEmpty()) {
+// for (int i = 0; i < location.getPoiList().size(); i++) {
+// Poi poi = (Poi) location.getPoiList().get(i);
+// sb.append("poiName:");
+// sb.append(poi.getName() + ", ");
+// sb.append("poiTag:");
+// sb.append(poi.getTags() + "\n");
+// }
+// }
+// if (location.getPoiRegion() != null) {
+// sb.append("PoiRegion: ");// 返回定位位置相对poi的位置关系,仅在开发者设置需要POI信息时才会返回,在网络不通或无法获取时有可能返回null
+// PoiRegion poiRegion = location.getPoiRegion();
+// sb.append("DerectionDesc:"); // 获取POIREGION的位置关系,ex:"内"
+// sb.append(poiRegion.getDerectionDesc() + "; ");
+// sb.append("Name:"); // 获取POIREGION的名字字符串
+// sb.append(poiRegion.getName() + "; ");
+// sb.append("Tags:"); // 获取POIREGION的类型
+// sb.append(poiRegion.getTags() + "; ");
+// sb.append("\nSDK版本: ");
+// }
+//// int permission = checkPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION);
+//// sb.append("\npermsission: " + permission);
+//// sb.append(locationService.getSDKVersion()); // 获取SDK版本
+// if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
+// sb.append("\nspeed : ");
+// sb.append(location.getSpeed());// 速度 单位:km/h
+// sb.append("\nsatellite : ");
+// sb.append(location.getSatelliteNumber());// 卫星数目
+// sb.append("\nheight : ");
+// sb.append(location.getAltitude());// 海拔高度 单位:米
+// sb.append("\ngps status : ");
+// sb.append(location.getGpsAccuracyStatus());// *****gps质量判断*****
+// sb.append("\ndescribe : ");
+// sb.append("gps定位成功");
+// } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
+// // 运营商信息
+// if (location.hasAltitude()) {// *****如果有海拔高度*****
+// sb.append("\nheight : ");
+// sb.append(location.getAltitude());// 单位:米
+// }
+// sb.append("\noperationers : ");// 运营商信息
+// sb.append(location.getOperators());
+// sb.append("\ndescribe : ");
+// sb.append("网络定位成功");
+// } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
+// sb.append("\ndescribe : ");
+// sb.append("离线定位成功,离线定位结果也是有效的");
+// } else if (location.getLocType() == BDLocation.TypeServerError) {
+// sb.append("\ndescribe : ");
+// sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
+// } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
+// sb.append("\ndescribe : ");
+// sb.append("网络不同导致定位失败,请检查网络是否通畅");
+// } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
+// sb.append("\ndescribe : ");
+// sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
+// }
+//// logMsg(sb.toString(), tag);
+// Log.e(TAG, "onReceiveLocation: " + sb);
+// }
+ Log.e(TAG, "AmapAddress: " + mCacheHelper.getAsString(ADDRESS_KEY));
+ Log.e(TAG, "AmapError: " + mCacheHelper.getAsString(ERROR_KEY));
+ Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-network");
+ Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "-gps");
+ Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ASSISTED_GPS_ENABLED, 0);
+ }
+
+ @Override
+ public void onConnectHotSpotMessage(String s, int i) {
+ super.onConnectHotSpotMessage(s, i);
+ }
+
+ /**
+ * 回调定位诊断信息,开发者可以根据相关信息解决定位遇到的一些问题
+ * @param locType 当前定位类型
+ * @param diagnosticType 诊断类型(1~9)
+ * @param diagnosticMessage 具体的诊断信息释义
+ */
+ @Override
+ public void onLocDiagnosticMessage(int locType, int diagnosticType, String diagnosticMessage) {
+ super.onLocDiagnosticMessage(locType, diagnosticType, diagnosticMessage);
+// int tag = 2;
+ StringBuffer sb = new StringBuffer(256);
+ sb.append("诊断结果: ");
+ if (locType == BDLocation.TypeNetWorkLocation) {
+ if (diagnosticType == 1) {
+ sb.append("网络定位成功,没有开启GPS,建议打开GPS会更好");
+ sb.append("\n" + diagnosticMessage);
+ } else if (diagnosticType == 2) {
+ sb.append("网络定位成功,没有开启Wi-Fi,建议打开Wi-Fi会更好");
+ sb.append("\n" + diagnosticMessage);
+ }
+ } else if (locType == BDLocation.TypeOffLineLocationFail) {
+ if (diagnosticType == 3) {
+ sb.append("定位失败,请您检查您的网络状态");
+ sb.append("\n" + diagnosticMessage);
+ }
+ } else if (locType == BDLocation.TypeCriteriaException) {
+ if (diagnosticType == 4) {
+ sb.append("定位失败,无法获取任何有效定位依据");
+ sb.append("\n" + diagnosticMessage);
+ } else if (diagnosticType == 5) {
+ sb.append("定位失败,无法获取有效定位依据,请检查运营商网络或者Wi-Fi网络是否正常开启,尝试重新请求定位");
+ sb.append(diagnosticMessage);
+ } else if (diagnosticType == 6) {
+ sb.append("定位失败,无法获取有效定位依据,请尝试插入一张sim卡或打开Wi-Fi重试");
+ sb.append("\n" + diagnosticMessage);
+ } else if (diagnosticType == 7) {
+ sb.append("定位失败,飞行模式下无法获取有效定位依据,请关闭飞行模式重试");
+ sb.append("\n" + diagnosticMessage);
+ } else if (diagnosticType == 9) {
+ sb.append("定位失败,无法获取任何有效定位依据");
+ sb.append("\n" + diagnosticMessage);
+ }
+ } else if (locType == BDLocation.TypeServerError) {
+ if (diagnosticType == 8) {
+ sb.append("定位失败,请确认您定位的开关打开状态,是否赋予APP定位权限");
+ sb.append("\n" + diagnosticMessage);
+ }
+ }
+ Log.e(TAG, "onLocationChanged: " + "定位失败");
+ mCacheHelper.put(ERROR_KEY, sb.toString());
+ Log.e(TAG, "onLocDiagnosticMessage: " + sb);
+// logMsg(sb.toString(), tag);
+ }
+ };
+
+// public AMapLocationClient getLocationClient() {
+// if (null == locationClient) {
+// initAmap();
+// }
+// return locationClient;
+// }
+
+// public void initAmap() {
+// locationClient = new AMapLocationClient(mContext);
+// AMapLocationClientOption option = new AMapLocationClientOption();
+// option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
+// option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
+// option.setNeedAddress(true);
+// //获取一次定位结果:
+// //该方法默认为false。
+// option.setOnceLocation(true);
+// //获取最近3s内精度最高的一次定位结果:
+// //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
+// // 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
+// option.setOnceLocationLatest(true);
+// locationClient.setLocationOption(option);
+// //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
+// //设置定位监听
+// locationClient.setLocationListener(new AMapLocationListener() {
+//
+// @Override
+// public void onLocationChanged(AMapLocation aMapLocation) {
+// StringBuilder sb = new StringBuilder();
+// //errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
+// if (aMapLocation.getErrorCode() == 0) {
+// Log.e(TAG, "onLocationChanged: " + "定位成功");
+// Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
+// sb.append(aMapLocation.getAddress()).append("\n");
+// mMMKV.encode( ADDRESS_KEY, aMapLocation.getAddress());
+// mMMKV.encode( LONGITUDE_KEY, aMapLocation.getLongitude());
+// mMMKV.encode( LATITUDE_KEY, aMapLocation.getLatitude());
+// mMMKV.encode( ERROR_KEY, "");
+// } else {
+// //定位失败
+// sb.append("定位失败" + "\n");
+// Log.e(TAG, "onLocationChanged: " + "定位失败");
+// mMMKV.encode( ERROR_KEY, String.valueOf(aMapLocation.getErrorInfo()));
+// }
+// Log.e(TAG, (String) SPUtils.get(mContext, ADDRESS_KEY, "-"));
+// Log.e(TAG, (String) SPUtils.get(mContext, ERROR_KEY, "-"));
+// Log.e(TAG, "amap: " + sb.toString());
+// }
+// });
+// //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
+// locationClient.stopLocation();
+// locationClient.startLocation();
+// Log.e(TAG, "initAmap: " + "startLocation");
+// }
+
+
}