Seleccionador de archivos de Android

Quiero hacer un uploader de archivos. Y por lo tanto, necesito un selector de archivos, pero no quiero escribir esto por mí mismo. Encuentro el encargado de archivo de OI y pienso que me conviene. Pero, ¿cómo puedo obligar al usuario a instalar el gestor de archivos OI? Si no puedo, ¿hay una mejor manera de incluir un administrador de archivos en mi aplicación? Gracias

EDIT ( 02 ene 2012 ):

Creé un pequeño proyecto de biblioteca de código abierto para Android que simplifica este proceso, al mismo tiempo que proporciona un explorador de archivos integrado (en caso de que el usuario no tenga uno presente). Es extremadamente simple de usar, requiriendo sólo unas pocas líneas de código.

Puede encontrarlo en GitHub: aFileChooser .


ORIGINAL

Si desea que el usuario pueda elegir cualquier archivo del sistema, deberá incluir su propio gestor de archivos o aconsejar al usuario que descargue uno. Creo que lo mejor que puedes hacer es buscar contenido " Intent.createChooser() " en un Intent.createChooser() así:

 private static final int FILE_SELECT_CODE = 0; private void showFileChooser() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { // Potentially direct the user to the Market with a Dialog Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); } } 

A continuación, escuchar el Uri del archivo seleccionado en onActivityResult() así:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case FILE_SELECT_CODE: if (resultCode == RESULT_OK) { // Get the Uri of the selected file Uri uri = data.getData(); Log.d(TAG, "File Uri: " + uri.toString()); // Get the path String path = FileUtils.getPath(this, uri); Log.d(TAG, "File Path: " + path); // Get the file instance // File file = new File(path); // Initiate the upload } break; } super.onActivityResult(requestCode, resultCode, data); } 

El método getPath() en mi FileUtils.java es:

 public static String getPath(Context context, Uri uri) throws URISyntaxException { if ("content".equalsIgnoreCase(uri.getScheme())) { String[] projection = { "_data" }; Cursor cursor = null; try { cursor = context.getContentResolver().query(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow("_data"); if (cursor.moveToFirst()) { return cursor.getString(column_index); } } catch (Exception e) { // Eat it } } else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } 

El navegador de archivos Android me ayudó mucho. Es fácil y útil.

Creo que no debería "forzar" al usuario a hacer algo. Si sólo necesita un selector de archivos simple, puede escribirlo usted mismo. En el otro lado, si no quieres hacerlo (para tus usuarios), te mantendrás alejado de tus usuarios.

O puedes utilizar https://code.google.com/p/android-file-chooser/

He utilizado AndExplorer para este propósito y mi solución es un diálogo emergente y luego redirigir en el mercado para instalar la aplicación misssing:

Mi startCreation está tratando de llamar a selector de archivos / directorios externos. Si falta la función show showResultMessage.

 private void startCreation(){ Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); Uri startDir = Uri.fromFile(new File("/sdcard")); intent.setDataAndType(startDir, "vnd.android.cursor.dir/lysesoft.andexplorer.file"); intent.putExtra("browser_filter_extension_whitelist", "*.csv"); intent.putExtra("explorer_title", getText(R.string.andex_file_selection_title)); intent.putExtra("browser_title_background_color", getText(R.string.browser_title_background_color)); intent.putExtra("browser_title_foreground_color", getText(R.string.browser_title_foreground_color)); intent.putExtra("browser_list_background_color", getText(R.string.browser_list_background_color)); intent.putExtra("browser_list_fontscale", "120%"); intent.putExtra("browser_list_layout", "2"); try{ ApplicationInfo info = getPackageManager() .getApplicationInfo("lysesoft.andexplorer", 0 ); startActivityForResult(intent, PICK_REQUEST_CODE); } catch( PackageManager.NameNotFoundException e ){ showInstallResultMessage(R.string.error_install_andexplorer); } catch (Exception e) { Log.w(TAG, e.getMessage()); } } 

Este methos es simplemente recoger un diálogo y si el usuario quiere instalar la aplicación externa de mercado

 private void showInstallResultMessage(int msg_id) { AlertDialog dialog = new AlertDialog.Builder(this).create(); dialog.setMessage(getText(msg_id)); dialog.setButton(getText(R.string.button_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); dialog.setButton2(getText(R.string.button_install), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("market://details?id=lysesoft.andexplorer")); startActivity(intent); finish(); } }); dialog.show(); } 
  • ¿Qué versión de httpmime puedo usar con HttpClient de Android?
  • Subir archivo grande con barra de progreso y sin Error OutOfMemory en Android
  • Android: ¿Cómo subir el archivo .mp3 y la imagen al servidor http?
  • ¿Cómo subes imágenes a un servidor FTP dentro de una aplicación para Android?
  • Android Web-view archivo-selector después de la selección nada sucede
  • Necesidad de transferir el archivo .apk mediante webservice
  • Subida de imágenes de Android-Django
  • Carga de archivos de Android establecer el tipo de contenido a la imagen
  • Javax.net.ssl.SSLException durante la carga múltiple de Amazon S3
  • Android: Carga de un archivo en una página junto con otras cadenas POST
  • Subiendo el archivo en el servidor php desde el dispositivo Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.