2011-12-21 11 views
5

Hola, hay una manera de seleccionar la carpeta donde el usuario desea guardar el archivo en android. Reviso http://code.google.com/p/android-file-dialog/¿Cómo seleccionar una carpeta en android?

tiene la funcionalidad para seleccionar el archivo pero quiero seleccionar la carpeta, por favor proporcione un enlace utilizable o ejemplos.

+0

puede crear mediante programación dir seleccionado –

+0

Sugiero que le permite crear su propio selector de archivos/carpeta y lo llama con intentos. Es un poco tedioso, pero usted tiene el control de su código y puede llamarlo desde sus futuras aplicaciones. De lo contrario, busque un filexplorer de terceros que tenga una API pública a través de Intents. –

Respuesta

0

que utilizan la misma fuente en mi aplicación (casi seguro), y hay un bloque de código:

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

Sólo hay que modificar la forma en que if (file.isDirectory()) de manejar. Yo recomendaría que se declara un valor boolean en su actividad, que cambia a true si el archivo es un directorio y ya es falsa. Luego, si dicho valor es verdadero, recorra el directorio. Además, cuando cambie dicho valor a true, deberá llamar al selectButton.setEnabled(true). Esto sería bastante menos complicado que crear tu propio código, diría yo.

+0

por favor bríndenme el código modificado. –

+0

if (file.isDirectory()) {selectedFile = file; \t \t v.setSelected (true); selectButton.setEnabled (true); if (archivo.canRead()) {\t \t \t lastPositions.put (currentPath, position); getDir (path.get (posición));} else {new AlertDialog.Builder (esto) \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", nueva DialogInterface.OnClickListener() { onClick (de diálogo DialogInterface, \t \t \t \t \t \t \t \t \t \t int cuál) public void {\t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t}) show().; } } else {\t \t \t \t \t \t v.setSelected (false); \t \t \t selectButton.setEnabled (falso);} –

+0

he modificado la función que el anterior, pero quiero para seleccionar la carpeta en lugar del archivo, devuélvalo directorio anterior cuando yo recorrer la jerarquía de directorios. –

1

¿Qué le parece usar OI File Manager? Esta aplicación tiene las siguientes intenciones: PICK_FILE, PICK_DIRECTORY. Incluso hay un código de muestra en la página para usar los Intents.

+2

Creo que la pregunta apunta a la solución integrada, no a la aplicación externa. –

0

me encontré con el mismo problema y que terminan usando NoNonsense-FilePicker

Agregar a Gradle archivo

compilación 'com.nononsenseapps: FilePicker: 4.0.0'

de archivos de activación/carpeta/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 Act ivity resultado a obtener el archivo o archivos

@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());' método no encontrado. Si comento que, me estoy haciendo una excepción 'java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo {} com.myapp.app/com.nononsenseapps.filepicker.FilePickerActivity: android.view.InflateException: Línea de archivo XML binario # 0: archivo XML binario línea # 0: error al inflar la clase ImageButton' ¿Alguna idea? –

+1

Utils.makeHepticFeedback (getActivity()) es un método para hacer que el dispositivo vibre y le da a un botón la sensación de que no tiene nada que ver con el selector de archivos. Puedes comentarlo. Parece un problema de UI https://stackoverflow.com/questions/35448999/error-inflating-class-imagebutton –

Cuestiones relacionadas