148 lines
5.5 KiB
Java
148 lines
5.5 KiB
Java
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内精度最高的一次定位结果。
|
||
// 如果设置其为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) {
|
||
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();
|
||
}
|
||
|
||
}
|