繁体   English   中英

使用 Xamarin Forms 以编程方式打开 APK - Android 8.1

[英]Open APK programmatically with Xamarin Forms - Android 8.1

我正在尝试从我的 Xamarin.Forms 应用程序安装 APK。 我在 Android 实现中使用 FileProvider 和这段代码创建了一个 DependencyService:

Java.IO.File file = new Java.IO.File(updtFile);
var realUri = Android.Support.V4.Content.FileProvider.GetUriForFile(MainActivity.Instance, MainActivity.Instance.PackageName + ".provider", file);
Intent install = new Intent(Intent.ActionInstallPackage);
install.AddFlags(ActivityFlags.GrantReadUriPermission);
install.AddFlags(ActivityFlags.GrantWriteUriPermission);
install.AddFlags(ActivityFlags.GrantPersistableUriPermission);
install.SetDataAndType(realUri, "application/vnd.android.package-archive");
MainActivity.Instance.StartActivity(install);

它与 Android 7 完美配合,按预期打开包管理器。 它对 Android 8.1 完全没有任何作用,甚至不会抛出异常左右。 我为该应用启用了所有权限,如果我尝试使用文件资源管理器打开 APK,它可以正常工作。

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0.1.0" package="..." android:installLocation="auto">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="..." android:icon="@drawable/icon">
        <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
        </provider>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
</manifest>

这是 provider_paths.xml

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

我错过了什么吗?

谢谢。

找到了! 我在清单中缺少此权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM