| | |
| | | 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 |
| | | /// </summary> |
| | | [Android.App.Application] |
| | | public class Application : Android.App.Application |
| | | public class Application : Android.App.Application, Android.App.Application.IActivityLifecycleCallbacks |
| | | { |
| | | static void reStartApp(Android.App.Application application) |
| | | { |
| | |
| | | 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); |
| | |
| | | } |
| | | |
| | | base.OnCreate(); |
| | | RegisterActivityLifecycleCallbacks(this); |
| | | |
| | | initAll(); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 所有初始化全部在这个方法实现 |
| | | /// </summary> |
| | | 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"; |
| | | 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 obj) => { |
| | | 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) => { |
| | | BaseActivity.RefreshUIAction += (activity) => |
| | | { |
| | | MainPage.Show(); |
| | | checkSomeInfo(); |
| | | }; |
| | | BaseActivity.OnResumeAction += (activity) => { |
| | | BaseActivity.OnResumeAction += (activity) => |
| | | { |
| | | checkSomeInfo(); |
| | | |
| | | |
| | | }; |
| | | BaseActivity.OnDestroyAction += (activity) => { |
| | | BaseActivity.OnDestroyAction += (activity) => |
| | | { |
| | | Console.WriteLine("OnDestroyAction"); |
| | | BusSocket.Stop(); |
| | | //BusSocket.Stop(); |
| | | //UserInfo.Current.unlockTime = DateTime.Now; |
| | | }; |
| | | |
| | | |
| | | |
| | | HDLUtils.SetAuthoritiesName("com.hdl.onpro.fileProvider"); |
| | | |
| | | //Shared.Application.IsGpsEnable = true; |
| | | |
| | | Shared.Application.LocationAction = (arg1, arg2) => { |
| | | Console.WriteLine( "1111111111111111"); |
| | | Shared.Application.LocationAction = null; |
| | | |
| | | new HDL_ON.DAL.Server.HttpServerRequest().GetCityInfo(arg1.ToString(), arg2.ToString()); |
| | | |
| | | MainPage.Log($"经纬度:::{arg1}:{arg2}"); |
| | | |
| | | //获取经纬度 |
| | | 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}"); |
| | | }; |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="activity"></param> |
| | | 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() |
| | | { |
| | |
| | | } |
| | | 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; |
| | | |
| | | ///// <summary> |
| | | ///// 是否进入后台 |
| | | ///// </summary> |
| | | //public bool IsEnterBackground = false; |
| | | |
| | | /// <summary> |
| | | /// 进入后台的时间 |
| | | /// </summary> |
| | | DateTime CloseTime = DateTime.Now; |
| | | |
| | | /// <summary> |
| | | /// BusSocketStop |
| | | /// </summary> |
| | | void BusSocketStop() |
| | | { |
| | | //IsEnterBackground = true; |
| | | CloseTime = DateTime.Now; |
| | | MainPage.IsEnterBackground = true; |
| | | //进入后台mqtt正在连接重置状态 |
| | | HDL_ON.DAL.Mqtt.MqttClient.RemoteMqttIsConnecting = false; |
| | | HDL_ON.DriverLayer.UdpSocket._BusSocket.Stop(); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// BusSocketStart |
| | | /// </summary> |
| | | 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); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |