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

时间:2017-04-11 09:36:00

标签: c# android xamarin.forms

我正在使用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);

我已经尝试了以下两种方法来获取它,但两者都不正确

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最终成为 /存储/模拟/ 0 /数据/ {电话簿} / {IMAGENAME}

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

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

3 个答案:

答案 0 :(得分:2)

问题

我和Xamarin Media Plugin有同样的问题。对我来说,问题是:

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

在阅读了我发现的所有文档后,我只是注意到了这一点:

  

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

from:Github plugin page

  • 因此您可以将照片保存到手机图库(它将是公开的),但路径已知。
  • 并且我们不知道"存储临时数据"。

解决方案

在调查应用程序如何/在何处存储数据后,我发现插件在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',这将公开此基本路径'属性。

请告诉我它是否适合您!

答案 1 :(得分:0)

我解决了类似的问题。我想在所有用户都可以看到的文件夹中收集我的应用的所有文件。

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

FileManager under Android

如果要创建Directory,请添加到您的班级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;
}

答案 2 :(得分:0)

获取专用路径 var privatePath = file.Path;

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

https://github.com/jamesmontemagno/MediaPlugin

中找到文档