【发布时间】:2021-08-16 13:59:05
【问题描述】:
我在 Zebra 设备上安装了一个 Android 移动应用程序,该应用程序将留在家里。这一切都很好,但我一直在努力更新。我有检查版本号的代码,并且可以将新签名的 APK 下载到文件夹(MyFolder)中的设备。这样可行。如果需要,我可以从该文件夹安装更新,但用户将需要它来更新,而无需学习该过程。我在这个小组和其他人中阅读并尝试了很多东西,我相信这是超级简单的东西。我确保设备有文件,设备允许安装应用程序,并且可以访问设备存储。我收到消息错误解析包,但我不确定下一步该去哪里。这是我的代码
AndroidManifest.xml
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true">
MainActivity.cs (ProcessUpdate())
Android.Net.Uri fileUri = Android.Support.V4.Content.FileProvider.GetUriForFile(context, context.PackageName+".provider", myDir);
bool binstall = context.PackageManager.CanRequestPackageInstalls();
if (!binstall)
{
context.StartActivity(new Intent(Android.Provider.Settings.ActionManageUnknownAppSources));
}
Intent intent = new Intent(Intent.ActionView);
intent.AddFlags(ActivityFlags.NewTask);
intent.PutExtra(Intent.ExtraNotUnknownSource, true);
intent.SetDataAndType(fileUri, "application/vnd.android.package-archive");
intent.SetFlags(ActivityFlags.ClearTask | ActivityFlags.NewTask);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
try
{
context.StartActivity(intent);
}
catch (ActivityNotFoundException ex)
{
WritetoLog("ActivityNotFoundException ProcessUpdate - " + ex.Message);
}
catch (Exception ex)
{
WritetoLog("Exception ProcessUpdate - " + ex.Message);
}
【问题讨论】:
-
确保使用相同的密钥对包进行签名。另外我建议使用PackageInstaller API 而不是触发您自己的意图。此 API 可从 API 21 及更高版本获得。
-
@Cheesebaron 谢谢,我正在努力将其替换为 PackageInstaller,只是尝试在处理其他项目时解决它的外观。
-
等待你的好消息。
-
@JessieZhang-MSFT 我的代码中有 PackageInstaller 更改,我没有收到任何错误,但是,我下载的 apk 没有更新应用程序。因此,我不确定是否需要将更新的 apk 下载到特定位置。我有一个应用程序为诸如日志文件和获取任何 apk 更新之类的东西创建的文件夹,字面意思是 MyFolder。该应用程序执行更新过程并关闭/重新打开但仍然是相同的版本。我已经在另一台设备上检查了更新版本,这是正确的。所以继续跋涉。