添加项目文件。

This commit is contained in:
杨皓
2020-04-03 11:55:02 +08:00
parent f8a6829e30
commit d4e7a559f2
178 changed files with 20595 additions and 0 deletions

View File

@@ -0,0 +1,169 @@
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
}
}