Android 用于以编程方式更新apk的Xamarin应用程序
我试图通过从本地web服务器下载android APK并使用Receiver类中的Intent来安装它,从而自动更新android APK 因此,下载工作正常: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/&
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);