当前位置: 首页 > 知识库问答 >
问题:

表单从Android获取sdcard文件列表

解宏扬
2023-03-14

我将Xamarin.forms用于Android应用程序,并试图从CDCard获得文件列表。以下代码:

var dir = Android.OS.Environment.ExternalStorageDirectory();

返回本地路径,而不是cd卡的路径/存储/仿真/0

var file = await CrossFilePicker.Current.PickFile();
string pathFile = file.FilePath;

共有1个答案

全丰
2023-03-14

正如文档中所说的“Android:FilePath属性可能包含以content://开头的内容URI”,您应该将URI转换为FilePath。

这里有一个使用FilePicker nuget的方法,您应该在PCL项目中使用DependencyService,调用android本地方法。

1.在PCL项目中创建接口:

public interface IGetFiles
{
    List<string> GetFiles(string filetype);// you could set what type of file do you want
}
[assembly: Dependency(typeof(MainActivity))]//dont miss this line
namespace EntryCa.Droid
{
   public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity,IGetFiles
   {
       private static MainActivity Instance;
       List<string> fileList = new List<string>();
       protected override void OnCreate(Bundle savedInstanceState)
       {
         ...
         Instance = this;
         ...
       }

       public List<string> GetFiles(string filetype)
       {
            ActivityCompat.RequestPermissions(Instance, new string[] { Manifest.Permission.WriteExternalStorage }, 1);
            var path2 = Android.OS.Environment.ExternalStorageDirectory;
            return Search_Dir(path2, filetype); ;

       }

       public List<string> Search_Dir(Java.IO.File dir,string fileType)
       {

          Java.IO.File[] FileList = dir.ListFiles();

          if (FileList != null)
          {
            for (int i = 0; i < FileList.Length; i++)
            {

                if (FileList[i].IsDirectory)
                {
                    Search_Dir(FileList[i], fileType);
                }
                else
                {


                    if (FileList[i].Name.EndsWith(fileType))
                    {
                        fileList.Add(FileList[i].AbsolutePath);
                        //here you have that file.
                        //System.Console.WriteLine(FileList[i].AbsolutePath);
                    }
                }
             }
            return fileList;
           }
           return null;
        }
   }

}

3.调用您的页面:

List<string>  files =   DependencyService.Get<IGetFiles>().GetFiles(".txt");
 类似资料:
  • 问题内容: 我需要一种方法来遍历AngularJS表单的注册控件。本质上,我试图获取所有的$ dirty控件,但是没有控件数组(FormController除了包含控件本身以外,还具有许多不同的属性/函数-每个控件都是自己的对象)。 我一直在查看源代码,并且看到FormController中有一个数组正是我要查找的数组。有没有一种方法可以访问此值,或者扩展FormController使其包含返回此

  • 我们在KMM shared/commonMain项目中包含一个assets文件夹。该资产文件夹基本上包含许多JSON文件,这些文件在不同的子文件夹中结构化。 内置。gradle,资产文件夹被添加为android资源,因此它包含在构建AAR的根目录中。 在共享模块中,文件在通用Android中按需读取 这很好用。 现在到问题,读取文件夹: 当代码通过单元测试执行时,它会工作,然后返回文件夹。一旦AA

  • 基本信息 Path: /api/interface/getCatMenu Method: GET 接口描述: 请求参数 Query 参数名称 是否必须 示例 备注 project_id 是 token 是

  • 我们可以使用Autoloader来跟踪是否已从S3存储桶加载的文件。我关于Autoloader的问题:有没有办法读取Autoloader数据库以获取已加载文件的列表? 我可以在AWS Glue job书签中轻松做到这一点,但我不知道如何在Databricks Autoloader中做到这一点。

  • 问题 你想获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。 如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如: import os.pa

  • 一切工作正常(动作得到调用,UI渲染正确,等等...)。除了当我试图获取所选对象时,我一直得到NullPointerExcema(即使我用setProperty tyActionListener设置它)...我如何实际得到我在orderList上点击的行。我做了一个转换器,但仍然没有带我去哪里。 我使用webflow来处理动作(xml)。