Ali Rajiry
Ali Rajiry

Reputation: 1

problem with Install APK Programmatically in xamarin.forms

I have scenario where I have to download apk in background and install it without prompting any dialog to user. However when I try to install it using below code File



string mypath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;

            var filePath = Path.Combine(mypath, fileName);
          
                if (File.Exists(filePath))
                {
                    string extention = Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(Android.Net.Uri.FromFile(new Java.IO.File(filePath)).ToString());
                    string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(extention);
                    Context context = Android.App.Application.Context;
                    Android.Net.Uri fileUri = FileProvider.GetUriForFile(context, context.PackageName + ".provider", new Java.IO.File(filePath));
                    Intent intent = new Intent(Intent.ActionView);
                    intent.SetDataAndType(fileUri, mimeType);


                    intent.AddFlags(ActivityFlags.NewTask);
                    intent.AddFlags(ActivityFlags.GrantReadUriPermission);
                    context.StartActivity(intent);
                }

and below code for xml file

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <external-path name="external_file" path="." />
</paths>

and below code for AndroidManifest.xml file

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.fileprovider">
  <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
  <uses-permission android:name="android.permission.permission.INSTALL_LOCATION_PROVIDER" />
  <uses-permission android:name="android.permission.permission.READ_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <application android:label="Fileprovider.Android" android:theme="@style/MainTheme">
    <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_paths"/>
    </provider>

  </application>
</manifest>

but when click button to open .apk file view below error

enter image description here

Upvotes: 0

Views: 438

Answers (1)

Ivan I
Ivan I

Reputation: 9990

You cannot install APK without the prompt on Android. Actually I don't think you can do the similar thing on any modern operating system.

Upvotes: 1

Related Questions