using Acr.UserDialogs; using Android.App; using Android.Content; using Android.Content.PM; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; using Plugin.CurrentActivity; using System; using Xamarin.Forms; using ZXing.Mobile; namespace XXCpzs.Droid { [Activity(Label = "XXCpzs", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { internal static Context mContext { get; private set; } internal static MainActivity Instance { get; private set; } protected override void OnCreate(Bundle savedInstanceState) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; //var uiOpts = SystemUiFlags.LayoutStable | SystemUiFlags.LayoutFullscreen; //LayoutStable表示布局稳定,不随其他变动而变动 //LayoutFullscreen表示把布局拓宽到全屏幕 //Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOpts; //把标题栏设置为透明色 // Window.SetStatusBarColor(Android.Graphics.Color.Argb(0, 0, 0, 0)); base.OnCreate(savedInstanceState); Instance = this; mContext = this; UserDialogs.Init(this); Rg.Plugins.Popup.Popup.Init(this, savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); //初始化代码 CrossCurrentActivity.Current.Init(this, savedInstanceState); MobileBarcodeScanner.Initialize(Application); LoadApplication(new App()); DependencyService.Register(); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } #region --自动更新-- /// /// 使用DownloadManager下载安装文件 /// /// /// public void DownloadUpdateFile(string apkAddress) { var apkFileName = System.IO.Path.GetFileName(apkAddress); DownloadManager.Request request = new DownloadManager.Request(Android.Net.Uri.Parse(apkAddress)); // request.SetAllowedNetworkTypes(DownloadNetwork.Wifi);//网络环境 //request.SetDestinationInExternalPublicDir("download", "update1.apk"); request.SetDestinationInExternalFilesDir(this, Android.OS.Environment.DirectoryDownloads, apkFileName); request.SetNotificationVisibility(DownloadVisibility.VisibleNotifyCompleted); request.SetMimeType("application/vnd.android.package-archive"); //设置通知信息 request.SetTitle(apkFileName); request.SetDescription("软件更新"); //设置为可见和可管理 request.SetVisibleInDownloadsUi(true); //设置为可被媒体扫描器找到 request.AllowScanningByMediaScanner(); request.SetAllowedOverRoaming(false); //下载管理 DownloadManager downManager = (DownloadManager)this.GetSystemService(Context.DownloadService); //获取此次下载的ID,返回一个唯一编号(用于识别通知来源) var refrence = downManager.Enqueue(request); // 注册广播监听系统的下载完成事件。 IntentFilter intentFilter = new IntentFilter(DownloadManager.ActionDownloadComplete); var boradcastReceiver = new DownloadReceiver(refrence); this.RegisterReceiver(boradcastReceiver, intentFilter); /*备注:服务器端apk文件mime类型为application/vnd.android.package-archive * 需要权限:android.permission.INTERNET和android.permission.WRITE_EXTERNAL_STORAGE */ } /// /// 自定义下载更新 /// /// /// public void DownloadUpdateFile2(Context context, String apkAddress) { //权限检查 if (context.CheckSelfPermission(Android.Manifest.Permission.WriteExternalStorage) != Android.Content.PM.Permission.Granted) { this.RequestPermissions(new string[] { Android.Manifest.Permission.WriteExternalStorage }, 1001); return; } Java.IO.FileOutputStream outputStream = null; System.IO.Stream inputStream = null; Java.Net.HttpURLConnection connection = null; Java.IO.File installFile = null; try { var url = new Java.Net.URL(apkAddress); connection = (Java.Net.HttpURLConnection)url.OpenConnection(); connection.ConnectTimeout = 60 * 1000;//1分钟 connection.ReadTimeout = 60 * 10 * 1000; connection.Connect(); if (connection.ResponseCode != Java.Net.HttpStatus.Ok) { var errorMessage = connection.ResponseCode.ToString() + " " + connection.ResponseMessage; return; } var contentLength = connection.ContentLength; inputStream = connection.InputStream; var downloadFile = Android.Net.Uri.FromFile(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads)); installFile = new Java.IO.File(downloadFile.Path, System.IO.Path.GetFileName(apkAddress)); outputStream = new Java.IO.FileOutputStream(installFile, false);//需要获取存储权限 byte[] data = new byte[4096]; long total = 0; int count; while ((count = inputStream.Read(data, 0, data.Length)) > 0) { total += count; outputStream.Write(data, 0, count); } } catch (Exception ex) { Toast.MakeText(this, ex.Message, ToastLength.Long).Show(); } if (outputStream != null) outputStream.Close(); if (inputStream != null) inputStream.Close(); if (connection != null) connection.Disconnect(); if (installFile != null && installFile.Exists()) { var installIntent = new Intent(Intent.ActionView); installIntent.SetDataAndType(Android.Net.Uri.FromFile(installFile), "application/vnd.android.package-archive"); context.StartActivity(installIntent); } } #endregion } }