using System; using System.Net; using System.Threading.Tasks; using Android; using Android.App; using Android.Content; using Android.Net; using Android.OS; using Android.Runtime; using Android.Widget; using CN.Jpush.Android.Api; using HDL_ON; using Java.Util; using Microsoft.AppCenter; using Microsoft.AppCenter.Analytics; using Microsoft.AppCenter.Crashes; using Shared; namespace HDL_ON_Android { /// /// 设定为默认启动的Application /// [Android.App.Application] public class Application : Android.App.Application, Android.App.Application.IActivityLifecycleCallbacks { static void reStartApp(Android.App.Application application) { var intent = new Intent(application, typeof(BaseActivity)); intent.AddFlags(ActivityFlags.NewTask); application.StartActivity(intent); Android.OS.Process.KillProcess(Android.OS.Process.MyPid()); } public Application(IntPtr handle, Android.Runtime.JniHandleOwnership ownerShip) : base(handle, ownerShip) { } public override void OnCreate() { //注册未处理异常事件 AppCenter.Start("64ac5859-2cd7-4ef8-a5da-5455e29679ec", typeof(Analytics), typeof(Crashes)); if (Shared.Application.Activity != null) { reStartApp(this); return; } base.OnCreate(); RegisterActivityLifecycleCallbacks(this); initAll(); } /// /// 所有初始化全部在这个方法实现 /// void initAll() { string[] permissions = new string[] { Manifest.Permission.WriteExternalStorage, Manifest.Permission.RecordAudio, Manifest.Permission.Camera, Manifest.Permission.ProcessOutgoingCalls, Manifest.Permission.GetAccounts}; //禁止屏幕长亮 BaseActivity.KeepScreenON = false; //隐藏虚拟按键 BaseActivity.IsHideVirualButtons = true; //实现安卓返回按键 BaseActivity.BackKeyAction = () => { try { var result = MainPage.LoadEvent_BackAction(); switch (result) { case 0: break; case 1: case 2: BaseActivity.VerifyDateTime = DateTime.MaxValue; break; default: BaseActivity.VerifyDateTime = DateTime.MaxValue; break; } } catch (Exception ex) { MainPage.Log(ex.Message); BaseActivity.VerifyDateTime = DateTime.MaxValue; } }; init(); BaseActivity.OnCreateActoin += (activity, application) => { Language.CurrentLanguage = "Chinese"; Locale locale1 = Locale.Default; var localeList = Resources.Configuration.Locale; if (localeList.Language == "zh") { Language.CurrentLanguage = "Chinese"; } else { Language.CurrentLanguage = "English"; } //获取极光推送ID GetJPushRegistrationID(activity); BaseActivity.NetworkStateChanged += (int internetStatus) => { //if (!IsEnterBackground) //{ // ////BusSocket.Stop(); // //new System.Threading.Thread(() => // //{ // // System.Threading.Thread.Sleep(1000); // // //BusSocket.Start(); // //}) // //{ IsBackground = true }.Start(); //} //else //{ // Console.WriteLine("HHH 网络变化但处于后台"); //} //网络变化处理 HDLCommon.Current.UpdateInternetStatus((int)internetStatus, MainPage.IsEnterBackground); }; //开启定位服务 Shared.Application.StartGPSLocationService(); }; BaseActivity.RefreshUIAction += (activity) => { MainPage.Show(); checkSomeInfo(); }; BaseActivity.OnResumeAction += (activity) => { checkSomeInfo(); }; BaseActivity.OnDestroyAction += (activity) => { Console.WriteLine("OnDestroyAction"); //BusSocket.Stop(); //UserInfo.Current.unlockTime = DateTime.Now; }; HDLUtils.SetAuthoritiesName("com.hdl.onpro.fileProvider"); //Shared.Application.IsGpsEnable = true; //获取经纬度 Shared.Application.LocationAction = (lon, lat) => { try { Shared.Application.LocationAction = null; new HDL_ON.DAL.Server.HttpServerRequest().GetCityInfo(lon.ToString(), lat.ToString()); //关闭定位服务 Shared.Application.StopGPSLocationService(); } catch (Exception ex) { Utlis.WriteLine("GetCityInfo catch" + ex.Message); } MainPage.Log($"经纬度:::{lon}:{lat}"); }; } /// /// /// /// void GetJPushRegistrationID(BaseActivity activity) { try { //保存获取的极光服务器上的注册ID到本地文件 var tokenID = JPushInterface.GetRegistrationID(activity); Console.WriteLine("RegistrationID: " + tokenID); if (!string.IsNullOrEmpty(tokenID) && OnAppConfig.Instance.PushDeviceToken != tokenID) { OnAppConfig.Instance.PushDeviceToken = tokenID; OnAppConfig.Instance.PhoneName = Android.OS.Build.Manufacturer; OnAppConfig.Instance.SaveConfig(); } int loadTokenCount = 0; System.Threading.Tasks.Task.Run(() => { while (string.IsNullOrEmpty(tokenID)) { System.Threading.Thread.Sleep(1000); tokenID = JPushInterface.GetRegistrationID(activity); Console.WriteLine("Sleep.tokenID + " + JPushInterface.GetRegistrationID(activity)); loadTokenCount++; if (loadTokenCount > 30) { break; } } Console.WriteLine("RegistrationID: " + tokenID); if (!string.IsNullOrEmpty(tokenID) && OnAppConfig.Instance.PushDeviceToken != tokenID) { OnAppConfig.Instance.PushDeviceToken = tokenID; OnAppConfig.Instance.PhoneName = Android.OS.Build.Manufacturer; OnAppConfig.Instance.SaveConfig(); } }); } catch { } } public static bool IsShowTip = true; void init() { //手机名称 Android.OS.Build.Manufacturer; //OnAppConfig.Instance.PhoneName = Android.OS.Build.Manufacturer; //#if DEBUG //CN.Jpush.Android.Api.JPushInterface.SetDebugMode(true); //#endif CN.Jpush.Android.Api.JPushInterface.Init(this); } void checkSomeInfo() { try { IsShowTip = true; var status = isNetworkAvailable(this); int internetStatus = 0; if (!status) { internetStatus = 0; } var isWifi = isWifiConnected(this); if (isWifi) { internetStatus = 2; } else { internetStatus = 1; } } catch (Exception ex) { Console.WriteLine($"android check some info erorr : {ex.Message}"); } } bool isNetworkAvailable(Context context) { var cm = (ConnectivityManager)context.GetSystemService(ConnectivityService); if (cm == null || cm.ActiveNetworkInfo == null) { return false; } else { return cm.ActiveNetworkInfo.IsAvailable; } } bool isWifiConnected(Context context) { if (context != null) { var mConnectivityManager = (ConnectivityManager)context.GetSystemService (ConnectivityService); var mWiFiNetworkInfo = mConnectivityManager.GetNetworkInfo(ConnectivityType.Wifi); if (mWiFiNetworkInfo != null) { return mWiFiNetworkInfo.IsAvailable; } } return false; } public void OnActivityCreated(Activity activity, Bundle savedInstanceState) { } public void OnActivityDestroyed(Activity activity) { //throw new NotImplementedException (); } public void OnActivityPaused(Activity activity) { //throw new NotImplementedException (); } public void OnActivityResumed(Activity activity) { //throw new NotImplementedException (); } public void OnActivitySaveInstanceState(Activity activity, Bundle outState) { //throw new NotImplementedException (); } public void OnActivityStarted(Activity activity) { //throw new NotImplementedException (); mCount++; if (mCount == 1) { Console.WriteLine("HHH OnActivityStarted:foreground"); BusSocketStart(); //后台回到前台 new HDL_ON.UI.AppUnlockPage().LoadPage(); } } public void OnActivityStopped(Activity activity) { mCount--; if (mCount == 0) { Console.WriteLine("HHH OnActivityStopped: background"); BusSocketStop(); //进入后台 UserInfo.Current.unlockTime = DateTime.Now; } } public override void OnTerminate() { base.OnTerminate(); UnregisterActivityLifecycleCallbacks(this); } int mCount; ///// ///// 是否进入后台 ///// //public bool IsEnterBackground = false; /// /// 进入后台的时间 /// DateTime CloseTime = DateTime.Now; /// /// BusSocketStop /// void BusSocketStop() { //IsEnterBackground = true; CloseTime = DateTime.Now; MainPage.IsEnterBackground = true; //进入后台mqtt正在连接重置状态 HDL_ON.DAL.Mqtt.MqttClient.RemoteMqttIsConnecting = false; HDL_ON.DriverLayer.UdpSocket._BusSocket.Stop(); } /// /// BusSocketStart /// void BusSocketStart() { //IsEnterBackground = false; if (CloseTime.AddSeconds(10) < DateTime.Now) { //后台超过10s就断开MQTT重连 //if (HDL_ON.DriverLayer.Control.Ins.IsRemote) { HDL_ON.DAL.Mqtt.MqttClient.DisConnectRemote("closeTime", false); } } MainPage.IsEnterBackground = false; HDL_ON.DriverLayer.UdpSocket._BusSocket.Start(); HDL_ON.DriverLayer.Control.Ins.SearchLoaclGateway(); } protected override void Dispose(bool disposing) { base.Dispose(disposing); } } }