169 lines
7.3 KiB
C#
169 lines
7.3 KiB
C#
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<XXCpzs.Services.ITextToSpeechService, Services.TextToSpeechService>();
|
||
}
|
||
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 --自动更新--
|
||
|
||
/// <summary>
|
||
/// 使用DownloadManager下载安装文件
|
||
/// </summary>
|
||
/// <param name="context"></param>
|
||
/// <param name="apkAddress"></param>
|
||
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
|
||
*/
|
||
}
|
||
|
||
/// <summary>
|
||
/// 自定义下载更新
|
||
/// </summary>
|
||
/// <param name="context"></param>
|
||
/// <param name="apkAddress"></param>
|
||
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
|
||
}
|
||
} |