Android - 选择文件并获取绝对路径

时间:2017-06-20 09:39:02

标签: android xamarin.android uri android-contentprovider

我正在开发一个应用程序,它允许用户选择一个文件,并在获取它的路径后对其进行处理,我已经编写了一个代码,让我得到这样的路径

 private void OpenFile()
        {
            Intent i = new Intent(Intent.ActionGetContent);
            i.SetType("application/zip");
            StartActivityForResult(i,0);
        }

在结果活动中,我按如下方式提取路径:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            if (requestCode == 0)
            {


    if (resultCode == Result.Ok)
                    {
 string uri = data.DataString;
                    System.Uri myUri = new System.Uri(uri, System.UriKind.Absolute);
                    Android.Net.Uri uris =  Android.Net.Uri.FromParts(data.Scheme, myUri.LocalPath, myUri.Fragment);
                  // string a= myUri.LocalPath;

                  System.IO.Stream input=  ContentResolver.OpenInputStream(uris);

                    string uri = data.DataString;
                    ZipLogic.Unzip(uri);
                }
            }
        }

结果是这样的模式:

content://com.android.externalstorage.documents/document/xxxx-83BB%3xxx%2Fxxx.zip

但是当我尝试访问时,此路径返回 DirectoryNotFound Exception 我无法解决如何以Stream形式打开此路径。

1 个答案:

答案 0 :(得分:0)

幸运的是,我通过仔细观察Intent数据找到了答案。

json``response as an

说明: 所选文件结果在 Intent 对象中有一个名为 Data 的字段,基本上是Uri Invoker,它往往是 URI 对象 我用它来从ContentResolver获取输入流。