我刚开始使用Xamarin,对于Android的经验有限。
我已经触发了一个ActionOpenDocumentTree意图,以获取我的应用程序的“保存路径”文件。典型的选择器像这样。
从DocumentTree接收到的Uri形式如下: content://com.android.externalstorage.documents/tree/12FB-3215%3ATest
这是我使用的函数,它来自Filepicker-code:
public static string GetActualPathFromFile(Context thisContext, Android.Net.Uri uri)
{
bool isKitKat = Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat;
if (isKitKat && DocumentsContract.IsDocumentUri(thisContext, uri))
{
// ExternalStorageProvider
if (isExternalStorageDocument(uri))
{
string docId = DocumentsContract.GetDocumentId(uri);
char[] chars = { ':' };
string[] split = docId.Split(chars);
string type = split[0];
if ("primary".Equals(type, StringComparison.OrdinalIgnoreCase))
{
return Android.OS.Environment.ExternalStorageDirectory + "/" + split[1];
}
//How to handle other than primary?
在这种情况下,“type”变量是“12FB-3215”,而不是“primary”,因此它不会被处理。
当我选择内部存储时,我得到Uricontent://com.android.externalstorage.documents/tree/primary%3ATest,由于类型设置为“primary”,因此给出了路径/storage/emulated/0/Test。
那么ID为12FB-3215的SD卡的正确路径是什么? 是/storage/12FB-3215/Test还是/storage/emulated/12FB-3215/Test?
对于一个经验不足的Android编码人员,有什么好的建议吗?
GetActualPathFromFile()
。不要尝试获取文件系统路径。您可以使用获得的URI完成所有操作。通过该内容方案,您可以管理获取可移动微型SD卡的文件系统路径,但这将毫无用处,因为然后您无法在卡上写入。因此最好采取现代方法并坚持该内容方案。 - greenapps/storage/12FB-3215/Test
。 - greenapps