Files
FLYSN/app/src/main/java/com/info/sn/base/MyApplication.java
Administrator 79ea8888c1 update:2020.12.25
fix:新后台对接完成
add:
2020-12-25 11:09:47 +08:00

148 lines
5.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.info.sn.base;
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
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.arialyy.aria.core.Aria;
import com.info.sn.BuildConfig;
import com.info.sn.activity.MainActivity;
import com.info.sn.network.HTTPInterface;
import com.info.sn.utils.LogUtils;
import com.info.sn.utils.SPUtils;
import com.info.sn.utils.ToastUtil;
import org.json.JSONException;
import org.json.JSONObject;
//import com.blankj.utilcode.util.NetworkUtils;
//public class MyApplication extends Application implements NetworkUtils.OnNetworkStatusChangedListener {
public class MyApplication extends Application {
public static Context context;
private static MyApplication app;
private static AMapLocationClient locationClient = null;
@Override
public void onCreate() {
super.onCreate();
app = this;
if (!BuildConfig.DEBUG) {
catchException();
}
ToastUtil.init(this);
context = getApplicationContext();
Aria.init(this);
Aria.download(this).resumeAllTask();
}
private void catchException() {
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
Log.d("捕获异常子线程:", Thread.currentThread().getName() +
"在:" + e.getStackTrace()[0].getClassName());
}
}
);
//下面是新增方法!
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
while (true) {
try {
Looper.loop(); //会先执行这个方法,然后在执行下面的异常捕获方法!
} catch (Exception e) {
Log.d("捕获异常主线程:", Thread.currentThread().getName() + "在:" + e.getStackTrace()[0].getClassName());
e.printStackTrace();
}
}
}
});
}
// protected void attachBaseContext(Context newBase) {
// super.attachBaseContext(newBase);
// MultiDex.install(this);
// }
@Override
public void onTerminate() {
super.onTerminate();
//销毁时需要销毁定位client
if (null != locationClient) {
locationClient.onDestroy();
}
}
public static MyApplication getInstance() {
return app;
}
public static Context getAppContext() {
if (context == null) {
context = getAppContext();
}
return context;
}
public static AMapLocationClient getLocationClient() {
if (null == locationClient) {
initAmap();
}
return locationClient;
}
private static void initAmap() {
locationClient = new AMapLocationClient(context);
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内精度最高的一次定位结果。
// 如果设置其为truesetOnceLocation(boolean b)接口也会被设置为true反之不会默认为false。
option.setOnceLocationLatest(true);
locationClient.setLocationOption(option);
//设置定位模式为AMapLocationMode.Hight_Accuracy高精度模式。
//设置定位监听
locationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
StringBuffer sb = new StringBuffer();
//errCode等于0代表定位成功其他的为定位失败具体的可以参照官网定位错误码说明
if (aMapLocation.getErrorCode() == 0) {
sb.append(aMapLocation.getAddress() + "\n");
SPUtils.put(context, "AmapAddress", aMapLocation.getAddress());
SPUtils.put(context, "longitude", aMapLocation.getLongitude());
SPUtils.put(context, "latitude", aMapLocation.getLatitude());
} else {
//定位失败
sb.append("定位失败" + "\n");
SPUtils.put(context, "AmapError", aMapLocation.getErrorInfo());
}
// Log.e("AmapAddress", (String) SPUtils.get(context, "AmapAddress", ""));
// Log.e("AmapError", (String) SPUtils.get(context, "AmapError", ""));
Log.e("addr", sb.toString());
HTTPInterface.updateAdminInfo(context);
}
});
//设置场景模式后最好调用一次stop再调用start以保证场景模式生效
locationClient.stopLocation();
locationClient.startLocation();
}
}