【发布时间】:2019-10-04 16:41:25
【问题描述】:
我想从我的 xamarin android 应用程序的文件系统安装第 3 方应用程序。我在 Android 10 之前成功使用的代码非常简单明了。
Intent intent = new Intent(Intent.ActionView);
Uri data = Uri.FromFile(file);
intent.SetDataAndType(data, "application/vnd.android.package-archive");
context.StartActivity(intent);
此代码不适用于 Android 10,因为 ACTION_VIEW 和 ACTION_INSTALL_PACKAGE 在 Android 10 中已弃用。看来我们现在需要使用 PackageInstaller API。
我尝试使用 PackageInstaller API 编写一个方法。不幸的是,它不起作用。
带有 PackageInstaller API 的代码
public static void InstallPackageAndroidQAndAbove(Context context, string filePath, string packageName)
{
var packageInstaller = context.PackageManager.PackageInstaller;
var sessionParams = new PackageInstaller.SessionParams(PackageInstallMode.FullInstall);
sessionParams.SetAppPackageName(packageName);
int sessionId = packageInstaller.CreateSession(sessionParams);
var session = packageInstaller.OpenSession(sessionId);
var input = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var output = session.OpenWrite(packageName, 0, -1);
input.CopyTo(output);
output.Close();
input.Close();
input.Dispose();
session.Fsync(output);
var pendingIntent = PendingIntent.GetBroadcast(context, sessionId, new Intent(Intent.ActionInstallPackage), 0);
session.Commit(pendingIntent.IntentSender);
}
调用过程中出现“无法识别的流”异常。
我希望有人可以帮助我。
非常感谢您。
【问题讨论】:
-
嗯,您是否尝试过使用类似 stackoverflow.com/a/4605040/11104068 的东西,但将 uri 编辑为本地文件
-
很遗憾,这也没有用。
-
我希望您正在检查
INSTALL_PACKAGES的运行时权限 -
我在安装/清单期间给予许可。错误消息也会比我猜的更具体
标签: android xamarin.android apk android-install-apk android-10.0