How to select folder in android?

前端 未结 4 1553
谎友^
谎友^ 2021-01-18 08:31

Hi there is a way to select folder where user want to save file in android . I check out http://code.google.com/p/android-file-dialog/

it has functionality to selec

相关标签:
4条回答
  • 2021-01-18 08:45

    Check out this answer https://stackoverflow.com/a/28479561/779140 I am mentioned library author so don't hesitate to ask any questions.

    0 讨论(0)
  • 2021-01-18 08:49

    I used the same source in my app (pretty sure), and there is a block of code:

    protected void onListItemClick(ListView l, View v, int position, long id) {
        if (file.isDirectory()) {
            selectButton.setEnabled(false);
            if (file.canRead()) {
                lastPositions.put(currentPath, position);
                getDir(path.get(position));
            } else {
                new AlertDialog.Builder(this)
                        .setIcon(R.drawable.icon)
                        .setTitle(
                                "[" + file.getName() + "] "
                                        + getText(R.string.cant_read_folder))
                        .setPositiveButton("OK",
                                new DialogInterface.OnClickListener() {
    
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
    
                                    }
                                }).show();
            }
        } else {
            selectedFile = file;
            v.setSelected(true);
            selectButton.setEnabled(true);
        }
    }
    

    You just have to edit how it handle's if (file.isDirectory()). I would recommend declaring a boolean value in your Activity which you change to true if the file is a directory and it is already false. Then if said value is true, then traverse the directory. Also when you change said value to true, you would need to call selectButton.setEnabled(true). This would be quite a bit less complicated than making your own code, I would say.

    0 讨论(0)
  • 2021-01-18 08:53

    I encountered the same issue and I end up using NoNonsense-FilePicker

    Add to gradle file

    compile 'com.nononsenseapps:filepicker:4.0.0'

    Trigger file/folder/dir pick

    try {
    
                        Utils.makeHepticFeedback(getActivity());
    
                        Intent selectDirectoyIntent = new Intent(getActivity(), FilePickerActivity.class);
                        selectDirectoyIntent.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
                        selectDirectoyIntent.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
                        selectDirectoyIntent.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
                        selectDirectoyIntent.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath());
                        startActivityForResult(selectDirectoyIntent, FILE_CODE);
    
                    } catch (Exception e) {
                        Log.e(LOG_TAG, "exception", e);
                        e.printStackTrace();
    
                        Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_SHORT).show();
                    }   
    

    Handle Activity result to get selected file or files

     @Override
            public void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
    
                if (resultCode == Activity.RESULT_OK && requestCode == CHOOSE_IMAGE_REQUEST_CODE) {
                    Uri selectedImageUri = data.getData();
                    String selectedImagePath = getRealPathFromURI(selectedImageUri);
    
    
                    // NOW WE HAVE OUR WANTED STRING
                    if (selectedImagePath != null) {
                        System.out
                                .println("selectedImagePath is the right one for you!");
    
                        PreferenceHelper.getPreferenceHelperInstance().setString(getActivity(),
                                PreferenceHelper.PLAYER_BACKGROUND,
                                selectedImageUri.toString());
    
                        Glide.with(getActivity()).load(Uri.parse(
                                PreferenceHelper.getPreferenceHelperInstance().getString(getActivity(),
                                        PreferenceHelper.PLAYER_BACKGROUND
                                        , AppConstants.DEFAULT_BACKGROUND_URL))).
                                into((ImageView) ButterKnife.findById(getActivity(), R.id.play_back));
    
                    }
                } else if (requestCode == FILE_CODE && resultCode == Activity.RESULT_OK) {
    
                    if (null != data && !data.getBooleanExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false)) {
                        // The URI will now be something like content://PACKAGE-NAME/root/path/to/file
                        Uri uri = data.getData();
                        // A utility method is provided to transform the URI to a File object
                        File file = com.nononsenseapps.filepicker.Utils.getFileForUri(uri);
                        // If you want a URI which matches the old return value, you can do
                        Uri fileUri = Uri.fromFile(file);
                        // Do something with the result...
    
                        Snackbar.make(fileFormat, "Recording folder updated to" + fileUri.getPath() + " ¯\\_(ツ)_/¯ ", Snackbar.LENGTH_SHORT).show();
    
                        AppConfig.RECORDING_FOLDER = fileUri.getPath();
    
                        PreferenceHelper.getPreferenceHelperInstance().setString(getActivity(), PreferenceHelper.RECORDING_FOLDER, AppConfig.RECORDING_FOLDER);
    
                        setUpSettingValue();
    
                    } else {
    
                        // Handling multiple results is one extra step
                        ArrayList<String> paths = data.getStringArrayListExtra(FilePickerActivity.EXTRA_PATHS);
                        if (paths != null) {
                            for (String path : paths) {
                                Uri uri = Uri.parse(path);
                                // Do something with the URI
                                File file = com.nononsenseapps.filepicker.Utils.getFileForUri(uri);
                                // If you want a URI which matches the old return value, you can do
                                Uri fileUri = Uri.fromFile(file);
                                // Do something with the result...
    
                                Toast.makeText(getActivity(), "Selected dir" + fileUri.getPath(), Toast.LENGTH_SHORT).show();
    
    
                            }
                        }
                    }
                }
    
            }
    
    0 讨论(0)
  • 2021-01-18 09:00

    How about using OI File Manager? This App has the following Intents: PICK_FILE, PICK_DIRECTORY. There is even sample code on the page for using the Intents.

    0 讨论(0)
提交回复
热议问题