在Xamarin中从外部SD卡的URI获取路径

3

我刚开始使用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编码人员,有什么好的建议吗?


为什么需要路径而不是返回的URI? - SushiHangover
GetActualPathFromFile()。不要尝试获取文件系统路径。您可以使用获得的URI完成所有操作。通过该内容方案,您可以管理获取可移动微型SD卡的文件系统路径,但这将毫无用处,因为然后您无法在卡上写入。因此最好采取现代方法并坚持该内容方案。 - greenapps
正确的路径大多是/storage/12FB-3215/Test - greenapps
我已经测试了CrossDownloadManager,它需要一个真实的文件路径才能工作,参考:https://github.com/SimonSimCity/Xamarin-CrossDownloadManager/blob/a126338d839ca11f66d4dff510c33146cb5e087d/DownloadManager/Plugin.DownloadManager.Android/DownloadFileImplementation.cs#L119这是一个糟糕的实现吗?如果是,Xamarin还有其他好的替代方案吗? - Large
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接