簡體   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