繁体   English   中英

如何创建一个 arraylist 的选定文件(或 url 列表),然后使用数组的每个元素 - Android

[英]How can I create an arraylist of selected files (or url list) and then use every element of the array - Android

我想同时 select 多个项目,并导入我的应用程序,例如 3 gpx 到我的应用程序,当我完成第一个时,应用程序抛出第二个直到数组完成(gpx 的数量,文件,我有) 我正在使用 OSMAND 并且 clipData 或 get gpxUri 的某些内容无法正常工作

osmandapi\OsmAndHelper.java 是意图的 function 所在的位置

 private void sendRequest(OsmAndIntentBuilder intentBuilder) {
        try {
            Uri uri = intentBuilder.getUri();
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.addFlags(intentBuilder.getFlags());
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            Map<String, String> extraData = intentBuilder.getExtraData();
 
 if (extraData != null) {
             for (String key : extraData.keySet()) {
             intent.putExtra(key, extraData.get(key));
             }
            }
            if (intentBuilder.getGpxUri() != null) {
            ClipData clipData = ClipData.newRawUri("Gpx", intentBuilder.getGpxUri());
            intent.setClipData(clipData);
            intentBuilder.getGpxUri();
          for (int i= 0; i< ClipData.newRawUri("Gpx", intentBuilder.getGpxUri()).getItemCount(); i++) {
               }
            }
           if (isIntentSafe(intent)){
                mActivity.startActivityForResult(intent, mRequestCode);
            } else {
                mOsmandMissingListener.osmandMissing();
            }
} catch (Exception e) {
            Toast.makeText(mActivity, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

谢谢你。

您可以创建一个ArrayList来存储选定的文件或 URL,然后使用循环遍历ArrayList的元素。

  1. 创建一个ArrayList来存储选择的文件或 URL。 例如:
    ArrayList<Uri> selectedFiles = new ArrayList<>();

  1. 在处理文件选择的代码中,将所选文件或 URL 添加到ArrayList 例如:

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(intent, REQUEST_CODE);


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            if (data.getClipData() != null) {
                for (int i = 0; i < data.getClipData().getItemCount(); i++) {
                    Uri fileUri = data.getClipData().getItemAt(i).getUri();
                    selectedFiles.add(fileUri);
                }
            } else {
                Uri fileUri = data.getData();
                selectedFiles.add(fileUri);
            }
        }
    }

  1. 使用循环遍历ArrayList的元素。 例如:

    for (Uri fileUri : selectedFiles) {
        // do something with the file
    }


  1. 可以在循环中使用uri读取文件内容并进行处理。

请务必注意,您需要检查设备是否具有读取您尝试访问的文件所需的权限。 您可以使用ContextCompat.checkSelfPermission()方法在尝试访问之前检查您是否具有所需的权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM