繁体   English   中英

Xamarin 媒体插件获取 android 图像路径

[英]Xamarin media plugin get android image path

我正在使用 xamarin 表单的媒体插件(由 james montemagno 提供)并且实际拍摄照片并存储它工作正常,我已经调试了模拟器上图像的创建并将其存储在

/storage/emulated/0/Android/data/{APPNAME}.Android/files/Pictures/{DIRECTORYNAME}/{IMAGENAME}

但是在我的应用程序中,它将从 API 获取文件名列表,我想检查该文件夹中是否存在图像。

以下在 IOS 上工作正常

var documentsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string jpgFilename = System.IO.Path.Combine(documentsDirectory, App.IMAGE_FOLDER_NAME);
jpgFilename = System.IO.Path.Combine(jpgFilename, name);

我已经尝试了以下 2 种在 android 上获取它的方法,但两者都不正确

var documentsDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
string jpgFilename = System.IO.Path.Combine(documentsDirectory, App.IMAGE_FOLDER_NAME);
jpgFilename = System.IO.Path.Combine(jpgFilename, name);
Java.IO.File dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DataDirectory + "/" + App.IMAGE_FOLDER_NAME + "/" + name);

dir 最终为 /storage/emulated/0/data/{DIRECTORY}/{IMAGENAME}

jpgFileName 最终为 /data/data/{APPNAME}.Android/files/{DIRECTORYNAME}/{IMAGENAME}

我不想在路径中硬编码任何东西,但这些都不对。 除了查看拍照时创建的文件的路径外,我在 GIT 文档中找不到任何用于获取文件路径的内容

问题

我在使用 Xamarin Media Plugin 时遇到了同样的问题。 对我来说,问题是:

  • 我们真的不知道插件在android上保存图片的位置。

在阅读了我找到的所有文档后,我注意到了这一点:

...当您的用户拍照时,它仍会存储临时数据,但如果需要,还会复制到公共画廊(基于平台)。 在 MediaFile 中,您现在将看到您也可以查询的 AlbumPath。

来自: Github 插件页面

  • 这样您就可以将照片保存到手机图库(它将是公开的),但路径是已知的。
  • 我们不知道“存储临时数据”是什么意思。

解决方案

在调查了应用程序如何/在哪里存储数据之后,我发现了该插件在 Android 上存储照片的位置 >>这样我就可以生成完整的文件名

在您的 Android 应用程序中,您要查找的基本路径是:

var basePath = Android.App.Application.Context.GetExternalFilesDir(null).AbsolutePath

它引用您的应用程序的外部私有文件夹 它看起来像这样:

/storage/emulated/0/Android/data/com.mycompany.myapp/files


所以最后得到你的完整文件的路径:

var fullPath = basePath + {DIRECTORYNAME} + {FILENAME};


我建议您创建一个依赖服务,例如“ILocalFileService”,它将公开此“基本路径”属性。

请让我知道它是否适合您!

我解决了一个类似的问题。 我想将我的应用程序的所有文件收集在一个对所有用户可见的文件夹中。

var documentsDirectory = Android.OS.Environment.GetExternalStoragePublicDirectory(
                                                Android.OS.Environment.DirectoryDocuments);

Android下的文件管理器

如果要创建Directory ,请using System.IO;添加到您的类using System.IO; 并且您在普通 .NET 应用程序中具有相同的功能。

if (!Directory.Exists(path))
    Directory.CreateDirectory(path);

如果要创建文件或目录,可以使用PCLStorage

public async Task<bool> CreateFileAsync(string name, string context)
{
    // get hold of the file system
    IFolder folder = FileSystem.Current.LocalStorage;

    // create a file, overwriting any existing file
    IFile file = await folder.CreateFileAsync(name, 
                                              CreationCollisionOption.ReplaceExisting);

    // populate the file with some text
    await file.WriteAllTextAsync(context);

    return true;
}

获取私有路径 var privatePath = file.Path;

获取公共相册路径 var publicAlbumPath = file.AlbumPath;

在此处查看文档https://github.com/jamesmontemagno/MediaPlugin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM