Saltar al contenido

Seleccione la ruta para almacenar el archivo en Xamarin Forms

Hemos buscando en distintos sitios para así tenerte la respuesta para tu dilema, en caso de dificultades déjanos la pregunta y contestaremos con gusto, porque estamos para ayudarte.

Solución:

los System.Environment.SpecialFolder.Personal escriba mapas a la ruta /data/data/[your.package.name]/files. Este es un directorio privado para su aplicación, por lo que no podrá ver estos archivos usando un explorador de archivos a menos que tenga privilegios de raíz.

Por lo tanto, si desea que los usuarios encuentren el archivo, no puede guardar el archivo en el Personal carpeta, pero en otra carpeta (como Downloads):

string directory = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
string file = Path.Combine(directory, "yourfile.txt");

También debe agregar permisos para AndroidManifest.xml:



Aquí hay un código para guardar una imagen para Android, iOS y UWP:

Androide:

public void SaveImage(string filepath)

    var imageData = System.IO.File.ReadAllBytes(filepath);
    var dir = Android.OS.Environment.GetExternalStoragePublicDirectory(
    Android.OS.Environment.DirectoryDcim);
    var pictures = dir.AbsolutePath;
    var filename = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
    var newFilepath = System.IO.Path.Combine(pictures, filename);

    System.IO.File.WriteAllBytes(newFilepath, imageData);
    //mediascan adds the saved image into the gallery
    var mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
    mediaScanIntent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(newFilepath)));
    Xamarin.Forms.Forms.Context.SendBroadcast(mediaScanIntent);

iOS:

public async void SaveImage(string filepath)

    // First, check to see if we have initially asked the user for permission 
    // to access their photo album.
    if (Photos.PHPhotoLibrary.AuthorizationStatus == 
        Photos.PHAuthorizationStatus.NotDetermined)
    
        var status = 
            await Plugin.Permissions.CrossPermissions.Current.RequestPermissionsAsync(
                Plugin.Permissions.Abstractions.Permission.Photos);
    
    
    if (Photos.PHPhotoLibrary.AuthorizationStatus == 
        Photos.PHAuthorizationStatus.Authorized)
    
        // We have permission to access their photo album, 
        // so we can go ahead and save the image.
        var imageData = System.IO.File.ReadAllBytes(filepath);
        var myImage = new UIImage(NSData.FromArray(imageData));

        myImage.SaveToPhotosAlbum((image, error) =>
        
            if (error != null)
                System.Diagnostics.Debug.WriteLine(error.ToString());
        );
    

Tenga en cuenta que para iOS, estoy usando el paquete nuget Plugin.Permissions para solicitar permiso al usuario.

UWP:

public async void SaveImage(string filepath)

    var imageData = System.IO.File.ReadAllBytes(filepath);
    var filename = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
    
    if (Device.Idiom == TargetIdiom.Desktop)
    
        var savePicker = new Windows.Storage.Pickers.FileSavePicker();
        savePicker.SuggestedStartLocation = 
            Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
        savePicker.SuggestedFileName = filename;
        savePicker.FileTypeChoices.Add("JPEG Image", new List()  ".jpg" );

        var file = await savePicker.PickSaveFileAsync();

        if (file != null)
        
            CachedFileManager.DeferUpdates(file);
            await FileIO.WriteBytesAsync(file, imageData);
            var status = await CachedFileManager.CompleteUpdatesAsync(file);

            if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
                System.Diagnostics.Debug.WriteLine("Saved successfully"));
        
    
    else
    
        StorageFolder storageFolder = KnownFolders.SavedPictures;
        StorageFile sampleFile = await storageFolder.CreateFileAsync(
            filename + ".jpg", CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteBytesAsync(sampleFile, imageData);
    

Si haces scroll puedes encontrar las notas de otros desarrolladores, tú asimismo tienes la habilidad dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *