微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用Xamarin Forms以编程方式打开APK-Android 8.1

我正在尝试从Xamarin.Forms应用程序安装APK。 我已使用FileProvider通过以下代码在Android实现中创建了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"/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。