在xamarin.forms中以编程方式安装APK的问题



我有一个场景,我必须在后台下载apk并安装它,而不向用户提示任何对话框。然而,当我尝试使用以下代码安装它时,文件


string mypath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
var filePath = Path.Combine(mypath, fileName);

if (File.Exists(filePath))
{
string extention = Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(Android.Net.Uri.FromFile(new Java.IO.File(filePath)).ToString());
string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(extention);
Context context = Android.App.Application.Context;
Android.Net.Uri fileUri = FileProvider.GetUriForFile(context, context.PackageName + ".provider", new Java.IO.File(filePath));
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(fileUri, mimeType);

intent.AddFlags(ActivityFlags.NewTask);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
context.StartActivity(intent);
}

以及以下xml文件的代码

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_file" path="." />
</paths>

和以下代码的AndroidManifest.xml文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.fileprovider">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.permission.INSTALL_LOCATION_PROVIDER" />
<uses-permission android:name="android.permission.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:label="Fileprovider.Android" android:theme="@style/MainTheme">
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
</application>
</manifest>

但当点击按钮打开.apk文件视图下方错误时

在此处输入图像描述

如果没有提示,您无法在Android上安装APK。事实上,我不认为你可以在任何现代操作系统上做类似的事情。

最新更新