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);
}
}
}