2011-12-21 28 views
5

Xin chào, có một cách để chọn thư mục mà người dùng muốn lưu tệp trong Android. Tôi xem qua số http://code.google.com/p/android-file-dialog/Cách chọn thư mục trong android?

nó có chức năng chọn tệp nhưng tôi muốn chọn thư mục, vui lòng cung cấp cho tôi liên kết hoặc ví dụ có thể sử dụng.

+0

bạn có thể tạo thư mục theo cách lập trình –

+0

Tôi đề nghị bạn tạo bộ chọn tệp/thư mục của riêng mình và gọi nó bằng ý định. Đó là một chút tẻ nhạt nhưng bạn đang kiểm soát mã của bạn và bạn có thể gọi nó từ bạn các ứng dụng trong tương lai. Nếu không, hãy tìm kiếm tệp trình chỉnh sửa tệp bên thứ ba có API công khai thông qua Mục đích. –

Trả lời

0

tôi đã sử dụng cùng một nguồn trong ứng dụng của tôi (khá chắc chắn), và có một khối mã:

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); 
    } 
} 

Bạn chỉ phải chỉnh sửa nó như thế nào xử lý của if (file.isDirectory()). Tôi khuyên bạn nên khai báo giá trị boolean trong Hoạt động mà bạn thay đổi thành true nếu tệp là thư mục và nó đã là false. Sau đó, nếu giá trị nói là đúng, sau đó đi qua thư mục. Ngoài ra, khi bạn thay đổi giá trị đã nói thành true, bạn cần phải gọi số selectButton.setEnabled(true). Điều này sẽ khá phức tạp hơn một chút so với việc tạo mã của riêng bạn, tôi sẽ nói.

+0

vui lòng cung cấp cho tôi mã sửa đổi. –

+0

if (file.isDirectory()) {selectedFile = file; \t \t v.setSelected (true); selectButton.setEnabled (true); nếu (file.canRead()) {\t \t \t lastPositions.put (currentPath, position); getDir (path.get (vị trí));} else {mới AlertDialog.Builder (this) \t \t .setIcon (R.drawable.icon) .setTitle (\t \t \t \t \t "[" + file.getName() + "]" + getText (R.string.cant_read_folder)) \t \t \t \t \t .setPositiveButton ("OK", DialogInterface mới.OnClickListener() { public void onClick (thoại DialogInterface, \t \t \t \t \t \t \t \t \t \t int mà) {\t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t}) show(). } } người khác {\t \t \t \t \t \t v.setSelected (sai); \t \t \t selectButton.setEnabled (false);} –

+0

Tôi đã sửa đổi chức năng như trên, nhưng tôi muốn chọn thư mục thay cho tập tin, nó trở về thư mục trước khi tôi đi qua hệ thống phân cấp thư mục. –

1

Làm thế nào để sử dụng OI File Manager? Ứng dụng này có các mục đích sau: PICK_FILE, PICK_DIRECTORY. Thậm chí còn có mã mẫu trên trang để sử dụng Mục đích.

+2

Tôi nghĩ câu hỏi nhằm mục đích giải pháp tích hợp, không sử dụng ứng dụng bên ngoài. –

0

tôi gặp phải vấn đề tương tự và tôi sẽ chỉ sử dụng NoNonsense-FilePicker

Add để gradle tập tin

biên dịch 'com.nononsenseapps: filepicker: 4.0.0'

tập tin kích hoạt/thư mục/dir chọn

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(); 
       } 

Đạo luật xử lý ivity kết quả để nhận được tệp hoặc tệp được chọn

@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

'Utils.makeHepticFeedback (getActivity());' không tìm thấy phương thức. Nếu tôi nhận xét rằng, tôi nhận được ngoại lệ 'java.lang.RuntimeException: Không thể bắt đầu hoạt động ComponentInfo {com.myapp.app/com.nononsenseapps.filepicker.FilePickerActivity}: android.view.InflateException: Dòng tệp XML nhị phân # 0: Dòng tệp XML nhị phân # 0: Lỗi khi lạm dụng lớp ImageButton' Bất kỳ ý tưởng nào? –

+1

Utils.makeHepticFeedback (getActivity()) là phương pháp để làm cho thiết bị rung và đưa ra một nút cảm thấy nó không có gì để làm với bộ chọn tập tin. Bạn có thể bình luận nó. Có vẻ như vấn đề giao diện người dùng https://stackoverflow.com/questions/35448999/error-inflating-class-imagebutton –

Các vấn đề liên quan