Android,Xamarin:获取SD卡的文件路径



我目前正在开发一个应用程序,该应用程序通过您的手机并列出所有可用的MP3文件。我设法完成了这项工作并搜索了内部存储上的所有内容,但是当安装了SD卡时,我无法找到使用envoirment访问SD卡的方法。这是我的代码 - 当SD卡为TRUE时,您将看到缺少的部分。你能完成吗?

public List<string> ReturnPlayableMp3(bool sdCard)
{
List<string> res = new List<string>();
string phyle;
if(sdCard)
{
// missing 
}
else
{
try
{
var path1 = Android.OS.Environment.ExternalStorageDirectory.ToString();
var mp3Files = Directory.EnumerateFiles(path1, "*.mp3", SearchOption.AllDirectories);
foreach (string currentFile in mp3Files)
{
phyle = currentFile;
res.Add(phyle);
}
}
catch (Exception e9)
{
Toast.MakeText(ApplicationContext, "ut ohn" + e9.Message, ToastLength.Long).Show();
}
}

return res;
}

}

它只需要返回与内部存储完全相同的内容,这次才返回SD卡。现在,返回的是:

">

/存储/模拟/0">

我希望你能帮助我。谢谢!

所以我找到了它所在的地方:/storage/05B6-2226/

但数字仅指我的SD卡。如何以编程方式获取此路径?

看看这些方法:

  • Context.GetExternalFilesDir

返回主外部目录的绝对路径 文件系统(位于 Environment.ExternalStorageDirectory 上的某个位置( 应用程序可以放置其拥有的持久文件的位置。这些文件 是应用程序的内部,通常对 用户作为媒体。

  • Context.GetExternalFilesDirs

返回所有 应用程序可以持久放置的外部存储设备 它拥有的文件。这些文件是应用程序的内部文件,而不是 通常作为媒体对用户可见。

几天来我一直在寻找很多解决方案,这些解决方案最终为您提供了"外部"内置存储。终于找到了"可移动"SD卡的这个解决方案,并希望将其发布在这里,以防其他人仍在寻找。

如何在 xamarin.android 中的 mashmallow 中在外部存储 SD 卡上书写

//Get the list of External Storage Volumes (E.g. SD Card) 
Context context = Android.App.Application.Context;
var storageManager = (Android.OS.Storage.StorageManager)context.GetSystemService(Context.StorageService);
var volumeList = (Java.Lang.Object[])storageManager.Class.GetDeclaredMethod("getVolumeList").Invoke(storageManager);
List<Java.IO.File> ExtFolders = new List<Java.IO.File>();
//Select the Directories that are not Emulated
foreach (var storage in volumeList)
{
Java.IO.File info = (Java.IO.File)storage.Class.GetDeclaredMethod("getDirectory").Invoke(storage);
if ((bool)storage.Class.GetDeclaredMethod("isEmulated").Invoke(storage) == false && info.TotalSpace > 0)
{
//Get Directory Path
Console.WriteLine(info.Path);
}
}

只是想分享我的答案,我在哪里获得了 extStorages 路径,我在简单的文件浏览器应用程序中使用了此方法。

public static string[] GetRemovableStorages()
{
List<string> extStorage = new List<string>();
//If this throws exception
string storageDir = (string)Environment.StorageDirectory;
//Try this
string storageDir = Directory.GetParent (Environment.ExternalStoragePublicDirectory).Parent.FullName;
string[] directories = Directory.GetDirectories(storageDir);

foreach(string dir in directories)
{
try
{
var extStoragePath = new Java.IO.File(dir);
bool isRemovable = Environment.InvokeIsExternalStorageRemovable(extStoragePath);

if(isRemovable) extStorage.Add(extStoragePath.AbsolutePath);
else return null;
}   
catch
{

}
}

return extStorage.ToArray();
}

在我的情况下,Elikill58的答案抛出异常没有这样的方法"getDirectory",但我推荐Elikill58的答案

最新更新