using Android.App;
|
using Android.Widget;
|
using Android.OS;
|
using Shared;
|
using Android.Content.PM;
|
using System;
|
using Android.Content;
|
using Android.Net;
|
using Shared.Phone.UserView;
|
using CN.Jpush.Android.Api;
|
using CN.Jpush.Android.Service;
|
using Org.Json;
|
|
using Microsoft.AppCenter;
|
using Microsoft.AppCenter.Analytics;
|
using Microsoft.AppCenter.Crashes;
|
using Com.Tencent.MM.Sdk.Openapi;
|
using ZXing.Mobile;
|
using System.IO;
|
using GateWay.Droid.JPush;
|
|
namespace com.hdl.home
|
{
|
[Activity(Name = "com.hdl.home.wxapi.WXEntryActivity", Exported = true, Theme = "@android:style/Theme.Translucent", LaunchMode = Android.Content.PM.LaunchMode.SingleTask)]
|
class WXEntryActivity : Android.App.Activity, IWXAPIEventHandler
|
{
|
public void OnReq(BaseReq p0)
|
{
|
|
}
|
protected override void OnNewIntent(Intent intent)
|
{
|
base.OnNewIntent(intent);
|
Intent = intent;
|
com.hdl.home.Application.api?.HandleIntent(intent, this);
|
//Finish();
|
}
|
public static Action<string> RespAction;
|
public void OnResp(BaseResp p0)
|
{
|
|
if (p0 is SendAuth.Resp)
|
{
|
var resp = p0 as SendAuth.Resp;
|
|
switch (resp.ErrCode)
|
{
|
case SendAuth.Resp.InnerErrCode.ErrOk:
|
var result = new System.Net.WebClient { }.DownloadString($"https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx2ec8f53f6fa36e82&secret=a08585cd6ff2ce64570b9e7e6525dd8e&code={resp.Token}&grant_type=authorization_code");
|
RespAction?.Invoke(result);
|
break;
|
default:
|
RespAction?.Invoke(null);
|
break;
|
|
//case SendAuth.Resp.InnerErrCode.ErrUserCancel:
|
// break;
|
//case SendAuth.Resp.InnerErrCode.ErrAuthDenied:
|
// break;
|
|
}
|
}
|
|
this.Finish();
|
}
|
//IWXAPI api;
|
protected override void OnCreate(Bundle savedInstanceState)
|
{
|
base.OnCreate(savedInstanceState);
|
// 通过WXAPIFactory工厂,获取IWXAPI的实例
|
//api = WXAPIFactory.CreateWXAPI(this, "wx2ec8f53f6fa36e82", false);
|
|
// 将应用的appId注册到微信
|
//api.RegisterApp("wx2ec8f53f6fa36e82");
|
|
com.hdl.home.Application.api?.HandleIntent(Intent, this);
|
}
|
}
|
/// <summary>
|
/// 设定为默认启动的Application
|
/// </summary>
|
[Android.App.Application]
|
public class Application : Android.App.Application
|
{
|
public Application(IntPtr handle, Android.Runtime.JniHandleOwnership ownerShip) : base(handle, ownerShip) { }
|
|
/// <summary>
|
/// 检测内存泄露的东西
|
/// </summary>
|
//private Square.LeakCanary.RefWatcher _refWatcher;
|
|
public override void OnCreate()
|
{
|
//如果不是App的主进程,则不需要处理
|
if (this.IsCurrentAppProcess == false)
|
{
|
base.OnCreate();
|
return;
|
}
|
try
|
{
|
//这个东西好像可能会出异常
|
this.initAll();
|
}
|
catch (Exception ex)
|
{
|
//调试:记录系统异常
|
Shared.Phone.UserCenter.HdlLogLogic.Current.WriteOtherText(Shared.Phone.UserCenter.DirNameResourse.SystemLogFile, ex.Message + "\r\n" + ex.StackTrace, true, false);
|
}
|
base.OnCreate();
|
// 通过WXAPIFactory工厂,获取IWXAPI的实例
|
//api = WXAPIFactory.CreateWXAPI(this, "wx2ec8f53f6fa36e82", true);
|
|
//检测内存泄露的东西
|
//if (Square.LeakCanary.LeakCanaryXamarin.IsInAnalyzerProcess(this) == false)
|
//{
|
// _refWatcher = Square.LeakCanary.LeakCanaryXamarin.Install(this);
|
// _refWatcher.Watch(this);
|
//}
|
|
// 将应用的appId注册到微信
|
api?.RegisterApp("wx2ec8f53f6fa36e82");
|
}
|
|
/// <summary>
|
/// 判断当前进程是不是App自己的主进程
|
/// </summary>
|
private bool IsCurrentAppProcess
|
{
|
get
|
{
|
var activityManager = (ActivityManager)GetSystemService(ActivityService);
|
var listProcess = activityManager.RunningAppProcesses;
|
foreach (var process in listProcess)
|
{
|
if (process.ProcessName == "com.evoyo.home" && process.Pid == Android.OS.Process.MyPid())
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
}
|
|
internal static IWXAPI api;
|
|
public static void WXLogin()
|
{
|
var req = new SendAuth.Req { Scope = "snsapi_userinfo", State = "ZigbeeApp" };
|
api?.SendReq(req);
|
}
|
|
/// <summary>
|
/// 所有初始化全部在这个方法实现
|
/// </summary>
|
void initAll()
|
{
|
//取消屏幕常亮
|
BaseActivity.KeepScreenON = false;
|
//隐藏底部软按键
|
BaseActivity.IsHideVirualButtons = true;
|
|
//设置极光调试模式,为false时只打印警告信息
|
// System.Console.WriteLine($"AAA : {System.DateTime.Now.ToString()}");
|
|
JPushInterface.SetDebugMode(true);
|
JPushInterface.Init(this);
|
string registration_id = JPushInterface.GetRegistrationID(this);
|
|
BaseActivity.BackKeyAction = () =>
|
{
|
try
|
{
|
if (Shared.Common.CommonPage.BackKeyCanClick == false)
|
{
|
//不允许按返回键
|
return;
|
}
|
if (Shared.Common.CommonPage.Loading != null)
|
{
|
Console.WriteLine(Shared.Common.CommonPage.Loading.CurStatus);
|
if (Shared.Common.CommonPage.Loading.CurStatus)
|
{
|
//Shared.SimpleControl.MainPage.Loading.Hide ();
|
return;
|
}
|
}
|
var lastView = Shared.Application.MainPage.GetChildren(Shared.Application.MainPage.ChildrenCount - 1);
|
if (lastView != null && lastView.Tag?.ToString() == "Dialog")
|
{
|
Console.WriteLine("Remove Dialog!!!!");
|
var lastView2 = Shared.Application.MainPage.GetChildren(Shared.Application.MainPage.ChildrenCount - 2);
|
lastView.RemoveFromParent();
|
lastView2.RemoveFromParent();
|
Console.WriteLine("Remove Dialog End!!!!");
|
return;
|
}
|
}
|
catch (System.Exception ezx)
|
{
|
Console.WriteLine(ezx.Message);
|
}
|
if (HomePage.Instance.ChildrenCount > 1)
|
{
|
Console.WriteLine("Remove PageLayout Children!!!!");
|
HomePage.Instance.GetChildren(HomePage.Instance.ChildrenCount - 1).RemoveFromParent();
|
Console.WriteLine("Remove PageLayout Children End!!!!");
|
}
|
else if (Shared.Common.CommonPage.Instance.ChildrenCount > 2)
|
{
|
//这里只对应登陆界面的
|
Shared.Common.CommonPage.Instance.GetChildren(Shared.Common.CommonPage.Instance.ChildrenCount - 1).RemoveFromParent();
|
}
|
else
|
{
|
BaseActivity.VerifyDateTime = DateTime.MaxValue;
|
Console.WriteLine("BaseActivity VerifyDateTime Max!!!!");
|
}
|
};
|
BaseActivity.OnCreateActoin += (activity, application) =>
|
{
|
Shared.Application.FontSize = 12;
|
AppCenter.Start("4802834a-e7e9-4dd8-93f1-c2f88f0bd464", typeof(Analytics), typeof(Crashes));
|
#if Release
|
//保存获取的极光服务器上的注册ID到本地文件
|
var registrationId = JPushInterface.GetRegistrationID(activity);
|
System.Console.WriteLine("registrationId-极光id=" + registrationId);
|
if (!string.IsNullOrEmpty(registrationId))
|
{
|
Shared.Common.Config.Instance.RegistrationID = registrationId;
|
Shared.Common.Config.Instance.Save();
|
}
|
//调试:记录极光ID
|
Shared.Phone.UserCenter.HdlLogLogic.Current.WriteOtherText(Shared.Phone.UserCenter.DirNameResourse.JiguangFile, "receive1:" + registrationId, true, true);
|
#endif
|
};
|
BaseActivity.RefreshUIAction += (activity) =>
|
{
|
Shared.Language.CurrentLanguage = "Chinese";
|
Shared.Common.CommonPage.Instance.Show();
|
};
|
BaseActivity.NetworkStateChanged += (v) =>
|
{
|
};
|
BaseActivity.OnDestroyAction += (activity) =>
|
{
|
//socket停止连接
|
//ZigBee.Device.ZbGateway.FindGateWaySocket.Stop();
|
};
|
HDLUtils.SetAuthoritiesName("com.evoyo.home.fileProvider");
|
}
|
public static bool IsShowTip = true;
|
JpushNotificationReceiver myReceiver = new JpushNotificationReceiver { };
|
/// <summary>
|
/// 项目启动时网络查询
|
/// </summary>
|
void checkSomeInfo()
|
{
|
var status = isNetworkAvailable(this);
|
string internetStatus = "Available";
|
if (!status)
|
{
|
internetStatus = "UnaVailable";
|
}
|
else
|
{
|
var isWifi = isWifiConnected(this);
|
if (isWifi)
|
{
|
internetStatus = "WiFiConnect";
|
}
|
else
|
{
|
internetStatus = "MobileConnect";
|
}
|
}
|
int connectState = 0;
|
if (internetStatus == "UnaVailable")
|
{
|
connectState = 0;
|
}
|
else if (internetStatus == "WiFiConnect")
|
{
|
connectState = 2;
|
}
|
else
|
{
|
connectState = 1;
|
}
|
//ZigBee.Device.ZbGateway.CheckConnection(connectState);
|
}
|
/// <summary>
|
/// 网络是否可用
|
/// </summary>
|
/// <returns><c>true</c>, if network available was ised, <c>false</c> otherwise.</returns>
|
/// <param name="context">Context.</param>
|
bool isNetworkAvailable(Context context)
|
{
|
var cm = (ConnectivityManager)context.GetSystemService(ConnectivityService);
|
if (cm == null || cm.ActiveNetworkInfo == null)
|
{
|
//当前网络不可用
|
return false;
|
}
|
else
|
{
|
return cm.ActiveNetworkInfo.IsAvailable;
|
}
|
}
|
/// <summary>
|
/// 网络是否连接
|
/// </summary
|
/// <returns><c>true</c>, if wifi connected was ised, <c>false</c> otherwise.</returns>
|
/// <param name="context">Context.</param>
|
bool isWifiConnected(Context context)
|
{
|
if (context != null)
|
{
|
var cm = (ConnectivityManager)context.GetSystemService(ConnectivityService);
|
var mWiFiNetworkInfo = cm.GetNetworkInfo(ConnectivityType.Wifi);
|
if (Android.Net.NetworkInfo.State.Connected == mWiFiNetworkInfo.GetState())
|
{
|
//当前网络是Wi-Fi连接
|
return true;
|
}
|
var moWiFiNetworkInfo = cm.GetNetworkInfo(ConnectivityType.Mobile);
|
if (Android.Net.NetworkInfo.State.Connected == moWiFiNetworkInfo.GetState())
|
{
|
//当前网络是Mobile连接
|
return false;
|
}
|
}
|
return false;
|
}
|
}
|
}
|
|
namespace Shared
|
{
|
public static class QRCode
|
{
|
static ZXing.Mobile.MobileBarcodeScanner scanner;
|
public static void ScanQRcode(Action<string> action, string cancel = "取消", string flashText = "闪光灯", string titleText = "二维码扫描")
|
{
|
((BaseActivity)Shared.Application.Activity).SetCamera(async (obj) =>
|
{
|
if (obj)
|
{
|
if (scanner == null)
|
{
|
MobileBarcodeScanner.Initialize(Shared.Application.Activity.Application);
|
var mZXingCustomScanView = new GateWay.Droid.ZXingCustomScanView(Shared.Application.Activity.Application);
|
mZXingCustomScanView.cancelTextView.Text = cancel;
|
mZXingCustomScanView.flashTextView.Text = flashText;
|
mZXingCustomScanView.titleTextView.Text = titleText;
|
var bOn = false;
|
scanner = new ZXing.Mobile.MobileBarcodeScanner()
|
{
|
UseCustomOverlay = true,
|
CustomOverlay = mZXingCustomScanView
|
};
|
|
mZXingCustomScanView.OnCancel += () =>
|
{
|
|
scanner?.Cancel();
|
};
|
|
mZXingCustomScanView.OnTorch += () =>
|
{
|
bOn = !bOn;
|
scanner?.Torch(bOn);
|
};
|
}
|
|
var result = await scanner.Scan();
|
|
if (result != null)
|
action?.Invoke(result.Text);
|
else
|
action?.Invoke(null);
|
|
}
|
else
|
{
|
action?.Invoke(null);
|
}
|
});
|
}
|
|
public static byte[] BytesFromText(string text, int width = 300, int height = 300)
|
{
|
var barcodeWriter = new ZXing.Mobile.BarcodeWriter
|
{
|
Format = ZXing.BarcodeFormat.QR_CODE,
|
Options = new ZXing.Common.EncodingOptions
|
{
|
Width = width,
|
Height = height,
|
Margin = 0
|
}
|
};
|
|
barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer();
|
var bitmap = barcodeWriter.Write(text);
|
using (var stream = new MemoryStream())
|
{
|
bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, stream); // this is the diff between iOS and Android
|
stream.Position = 0;
|
return stream.ToArray();
|
}
|
}
|
|
|
}
|
|
|
}
|