es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Instalar APK desde Xamarin Forms.

Quiero instalar el archivo APK desde el directorio de almacenamiento utilizando FileProvider en VS2019 – .Net Standard 2.1 y Target Framework API28 para Android. Pero obtengo el error "El nombre 'FileProvider' no existe en el contexto actual". Incluso intenté cambiar a .Net 2.0 y obtengo el mismo error.

Java.IO.File file = new Java.IO.File(filepath);
                    if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
                    {
                        Android.Net.Uri URIAPK = FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.ApplicationContext.PackageName + ".provider", filepath);
                        Intent intS = new Intent(Intent.ActionInstallPackage);
                        intS.SetData(URIAPK);
                        intS.SetFlags(ActivityFlags.GrantReadUriPermission);
                        Android.App.Application.Context.StartActivity(intS);
                    }
                    else
                    {
                        Android.Net.Uri URIAPK = Android.Net.Uri.FromFile(filepath);
                        Intent intS = new Intent(Intent.ActionView);
                        intS.SetDataAndType(URIAPK, "application/vnd.android.package-archive");
                        intS.SetFlags(ActivityFlags.NewTask);
                        Android.App.Application.Context.StartActivity(intS);
                    }

Intenté utilizar el espacio de nombres "Using Android.v4.content.FileProvider;" pero aún hay errores porque falta el archivo .dll, por lo que, al intentar instalar Xamarin.Android.Support.Compat Nuget, obtengo el error de supresión.

NU1202 El paquete Xamarin.Android.Support.Compat 28.0.0.3 no es compatible con netstandard2.1 (.NETStandard,Version=v2.1). El paquete Xamarin.Android.Support.Compat 28.0.0.3 es compatible con:
– monoandroid60 (MonoAndroid,Version=v6.0)
– monoandroid70 (MonoAndroid,Version=v7.0)
– monoandroid71 (MonoAndroid,Version=v7.1)
– monoandroid80 (MonoAndroid,Version=v8.0)
– monoandroid81 (MonoAndroid,Version=v8.1)
– monoandroid90 (MonoAndroid,Version=v9.0)

Por favor, dame la solución o cualquier otra metodología para instalar archivos APK.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error "El nombre 'FileProvider' no existe en el contexto actual" sugiere que la clase FileProvider no está siendo reconocida por el compilador. Esto se puede resolver agregando la siguiente declaración using en la parte superior de tu archivo C#:

    using Android.Support.V4.Content.FileProvider;
    

    Sin embargo, como mencionaste, estás teniendo problemas para agregar el paquete necesario Xamarin.Android.Support.Compat. Esto puede ser porque el paquete no es compatible con el framework .Net Standard 2.1 que estás utilizando.

    Una solución potencial a este problema es orientar a una versión inferior de la API de Android. Según el mensaje de error, el paquete Xamarin.Android.Support.Compat es compatible con las versiones MonoAndroid v6.0 a v9.0. Por lo tanto, podrías intentar cambiar el framework objetivo a un nivel de API más bajo, como el API 25 o 26.

    Otra solución es utilizar el método Uri.parse() incorporado para obtener la Uri del archivo APK, como se muestra a continuación:

    Java.IO.File file = new Java.IO.File(filepath);
    Android.Net.Uri uri = Android.Net.Uri.Parse("file://" + file.AbsolutePath);
    Intent intent = new Intent(Intent.ActionView);
    intent.SetDataAndType(uri, "application/vnd.android.package-archive");
    intent.SetFlags(ActivityFlags.NewTask);
    Application.Context.StartActivity(intent);
    

    Este código debería iniciar el instalador de APK en Android sin requerir el paquete Xamarin.Android.Support.Compat.

    Espero que esto te ayude a resolver el problema que estás enfrentando.

Comments are closed.