2011-12-21 17 views
5

हाय वहाँ फ़ोल्डर का चयन करने का एक तरीका है जहां उपयोगकर्ता एंड्रॉइड में फ़ाइल को सहेजना चाहता है। मैं बाहर की जाँच http://code.google.com/p/android-file-dialog/एंड्रॉइड में फ़ोल्डर का चयन कैसे करें?

यह फ़ाइल का चयन करने कार्यक्षमता है, लेकिन मैं फ़ोल्डर का चयन करना चाहते हैं, मुझे प्रयोग करने योग्य लिंक या उदाहरण दें।

+0

आप dir बना सकते हैं प्रोग्राम के –

+0

मैं आप अपने खुद के फ़ाइल/फ़ोल्डर पिकर बना सकते हैं और उद्देश्य से कॉल करने के लिए सुझाव देते हैं। यह थोड़ा कठिन है लेकिन आप अपने कोड के नियंत्रण में हैं और आप इसे भविष्य के अनुप्रयोगों से कॉल कर सकते हैं। अन्यथा एक तृतीय पक्ष filexplorer की तलाश करें जिसमें इरादे के माध्यम से एक सार्वजनिक एपीआई है। –

उत्तर

0

मैं अपने ऐप (यकीन है कि) में एक ही स्रोत का इस्तेमाल किया है, और वहाँ कोड का एक खंड है:

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

तुम सिर्फ संपादित करने के लिए कि यह कैसे संभाल के if (file.isDirectory()) है। मैं आपकी गतिविधि में boolean मान घोषित करने की अनुशंसा करता हूं, यदि फ़ाइल एक निर्देशिका है और यह पहले से ही गलत है, तो आप true पर बदलते हैं। फिर यदि कहा गया मान सही है, तो निर्देशिका को पार करें। साथ ही जब आप मान को true पर बदलते हैं, तो आपको selectButton.setEnabled(true) पर कॉल करना होगा। यह आपके कोड बनाने से काफी कम जटिल होगा, मैं कहूंगा।

+0

कृपया मुझे संशोधित कोड प्रदान करें। –

+0

अगर (file.isDirectory()) {चयनित फ़ाइल = फ़ाइल; \t \t v.set चयनित (सत्य); selectButton.setEnabled (सत्य); अगर (file.canRead()) {\t \t \t lastPositions.put (currentPath, position); getDir (path.get (स्थिति));} else {नई AlertDialog.Builder (यह) \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।OnClickListener() { सार्वजनिक शून्य onClick (DialogInterface संवाद, \t \t \t \t \t \t \t \t \t \t पूर्णांक जो) {\t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t}) शो()।; } } else {\t \t \t \t \t \t v.set चयनित (झूठा); \t \t \t selectButton.setEnabled (गलत);} –

+0

मैं समारोह को संशोधित किया है, जैसा कि ऊपर, लेकिन मैं फ़ोल्डर का चयन करने के लिए फ़ाइल के स्थान पर, यह पिछले निर्देशिका लौट जब मैं निर्देशिका पदानुक्रम पार करना चाहते हैं। –

1

OI File Manager का उपयोग करने के बारे में कैसे? इस ऐप में निम्नलिखित इरादे हैं: PICK_FILE, PICK_DIRECTORY। इरादों का उपयोग करने के लिए पृष्ठ पर नमूना कोड भी है।

+2

मुझे लगता है कि प्रश्न समाधान एकीकृत है, बाहरी अनुप्रयोग का उपयोग नहीं कर रहा है। –

0

इस उत्तर को देखें https://stackoverflow.com/a/28479561/779140 मुझे लाइब्रेरी लेखक का उल्लेख है इसलिए किसी भी प्रश्न पूछने में संकोच नहीं करें।

0

मैं एक ही मुद्दे का सामना करना पड़ा है और मैं का उपयोग कर NoNonsense-FilePicker

जोड़ें फ़ाइल

संकलन 'com.nononsenseapps: filepicker: 4.0.0' Gradle को खत्म

उत्प्रेरक फ़ाइल/फ़ोल्डर/dir

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

हैंडल अधिनियम लेने ivity परिणाम चयनित करने के लिए फ़ाइल या फ़ाइलों

@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());' विधि नहीं मिला। अगर मैं टिप्पणी है कि, मैं एक अपवाद 'java.lang.RuntimeException हो रही है: android.view.InflateException:: बाइनरी एक्सएमएल फ़ाइल लाइन गतिविधि ComponentInfo {com.myapp.app/com.nononsenseapps.filepicker.FilePickerActivity} प्रारंभ करने में अक्षम # 0: बाइनरी एक्सएमएल फ़ाइल लाइन # 0: त्रुटि चढ़ा वर्ग ImageButton' किसी भी विचार? –

+1

Utils.makeHepticFeedback (getActivity()) डिवाइस को कंपन बनाने के लिए और एक बटन यह फ़ाइल पिकर का कोई लेना देना नहीं है महसूस देने के लिए विधि है। आप इसे टिप्पणी कर सकते हैं। यह यूआई मुद्दे की तरह लगता है https://stackoverflow.com/questions/35448999/error-inflating-class-imagebutton –

संबंधित मुद्दे