Android 用于以编程方式更新apk的Xamarin应用程序

Android 用于以编程方式更新apk的Xamarin应用程序,android,xamarin,Android,Xamarin,我试图通过从本地web服务器下载android APK并使用Receiver类中的Intent来安装它,从而自动更新android APK 因此,下载工作正常: string mime = "application/vnd.android.package-archive"; string file = "com.fips.sorter.apk"; string apkurl = "http://myserver/downloads/&

我试图通过从本地web服务器下载android APK并使用Receiver类中的Intent来安装它,从而自动更新android APK

因此,下载工作正常:

  string mime = "application/vnd.android.package-archive";
  string file = "com.fips.sorter.apk";
  string apkurl = "http://myserver/downloads/" + file;
 
  string path = Path.Combine(ExternalStorageDirectory.Path, DirectoryDownloads, file);

  long id = downloadAPK(file, apkurl, mime);
然后实例化一个具体的BroadcastReceiver来更新应用程序

    class Receiver : BroadcastReceiver
    {
        private Activity activity;
        private long downloadId;

        public Receiver(Activity activity, long id)
        {
            this.activity = activity;
            this.downloadId = id;
        }

        public override void OnReceive(Context context, Intent intent)
        {
            DownloadManager manager = activity.GetSystemService(Context.DownloadService);
            
            Intent install = new Intent(Intent.ActionView);
            install.SetFlags(ActivityFlags.ClearTop);

            string PATH = $"{ExternalStorageDirectory.Path}/{DirectoryDownloads}/";
            string file = "com.fips.sorter.apk";

            intent.SetDataAndType(Android.Net.Uri.FromFile(new Java.IO.File(PATH + file)), manager.GetMimeTypeForDownloadedFile(downloadId));
            activity.StartActivity(install);

            activity.UnregisterReceiver(this);
            activity.Finish();
        }
    }

当activity.StartActivity被调用时,屏幕会要求选择要在其上操作的应用程序,无论选择了什么,应用程序都会停止,下次应用程序不会更新


仍然可以像这样以编程方式更新应用程序吗?如何使其工作?

您可以使用以下代码以编程方式在应用程序中安装
.apk

市场上的应用程序 用于自定义web服务中的应用程序 但是请注意,没有用户权限,我们无法安装应用程序。 因此,我们需要使用android.permission.request\u INSTALL\u包请求动态请求:

有关更多详细信息,请查看此

  BroadcastReceiver onComplete = new Receiver(this, id);
  RegisterReceiver(onComplete, new IntentFilter(DownloadManager.ActionDownloadComplete));
Intent goToMarket = new Intent(Intent.ActionView).SetData(Uri.Parse("xxx"));
            StartActivity(goToMarket);
Intent promptInstall = new Intent(Intent.ActionView)
    .SetDataAndType(Uri.Parse("file:///path/to/your.apk"),
                    "application/vnd.android.package-archive");
StartActivity(promptInstall);