Reputation: 53
So I have a button that verifies for updates and when I click it I want it to download and install the apk but I keep getting the error There was a problem parsing the package
.
Downloading ->
var imagePath = Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString(), "abcFichaObrasUpdate");
using (WebClient client = new WebClient())
{
try
{
if (!Directory.Exists(imagePath.ToString()))
{
Directory.CreateDirectory(imagePath.ToString());
}
Uri uri = new Uri(remoteUri);
client.DownloadFileCompleted += (s, e) => Extract(s, e, progress);
client.DownloadProgressChanged += (s, e) => ProgessChanged(s, e);
client.DownloadFileAsync(uri, imagePath + "/" + "update.apk");
}
catch (Exception)
{
throw;
}
}
So when the download is finished it save's in a path something like that /storage/emulated/0/Download/abcFichaObrasUpdate/update.apk
Instaling ->
Java.IO.File updatePath = new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString(), "abcFichaObrasUpdate");
Java.IO.File toInstall = new Java.IO.File(updatePath, "update.apk");
Android.Net.Uri apkUri = Android.Support.V4.Content.FileProvider.GetUriForFile(Application.Context,
AppInfo.PackageName + ".provider",
toInstall);
Intent intent = new Intent(Intent.ActionView);
intent.SetFlags(ActivityFlags.GrantReadUriPermission);
intent.SetFlags(ActivityFlags.ClearTop);
intent.SetFlags(ActivityFlags.NewTask);
intent.PutExtra(Intent.ExtraNotUnknownSource, true);
intent.SetData(apkUri);
Application.Context.StartActivity(intent);
AndroidManifest.xml
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.abcbraga.abcfichaobras.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" />
</provider>
filepaths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<files-path
name="files"
path="." />
</paths>
But when it gets the apkUri it transforms it to {content://com.abcbraga.abcfichaobras.provider/external/Download/abcFichaObrasUpdate/update.apk}
and when it tries to start the install activity it just throws the error, I think the problem is in the URI.
Upvotes: 2
Views: 2285
Reputation: 53
To make it work I changed provider
From android support v4
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.abcbraga.abcfichaobras.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" />
</provider>
To androidx core content
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_provider_paths" />
</provider>
Upvotes: 2