Reputation: 137
I am trying to install an .apk I have downloaded to the downloads folder in Android 10. I have tried this Xamarin Android 7+ install APK programmatically.
I gote this error:
Java.Lang.RuntimeException: 'Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/{PackName}-aV7Nkryw8OSTkpHc_8WmMg==/base.apk"],nativeLibraryDirectories=[/data/app/{PackName}-aV7Nkryw8OSTkpHc_8WmMg==/lib/arm64, /data/app/{PackName}-aV7Nkryw8OSTkpHc_8WmMg==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]'
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="{PackName}">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true" android:label="{Label}">
<provider android:name="android.support.v4.content.FileProvider" android:authorities="{PackName}.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-sdk android:minSdkVersion="24"/>
</manifest>
provider_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="." />
</paths>
Code:
Context context = AndroidApp.Context;
var file = new Java.IO.File(fileUri);
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
var apkUri = FileProvider.GetUriForFile(context, context.ApplicationContext.PackageName + ".provider", file);
Intent intentS = new Intent(Intent.ActionInstallPackage);
intentS.SetData(apkUri);
intentS.SetFlags(ActivityFlags.GrantReadUriPermission);
context.StartActivity(intentS);
}
Upvotes: 2
Views: 1402
Reputation: 13879
Since your target framework is set to Android 10 or later, and you are still using the old package, so you can try to change android.support.v4.FileProvider
to androidx.core.content.FileProvider
.
You can refer to the following code:
<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/provider_paths" />
</provider>
Upvotes: 1