Sei sulla pagina 1di 8

Bsqueda y Seleccin de Archivos desde una Aplicacin Android

El siguiente documento muestra la forma de realizar la bsqueda y seleccin de archivos desde una aplicacin Android. [Escriba el nombre del autor] 13/11/2013

Creacin de la UI de la aplicacin
Para el caso de este documento se desea que la UI de la aplicacin conste de un botn (Seleccionar Archivo) que permita acceder un explorador de archivos en donde se va a seleccionar el archivo buscado y de un TextView en donde se va a desplegar el Path del archivo que se est buscando. Como se muestra en la siguiente imagen.

El cdigo para la creacin de este layout (principal_main.xml) es el siguiente:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:layout_gravity="center_vertical|center_horizontal" > <TextView android:id="@+id/txtNombreArchivo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minWidth="200dp" android:padding="15dp" android:layout_weight="1" android:background="@drawable/txt_filename" /> <Button android:id="@+id/btnBuscar" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/buscar" android:padding="10dp" android:layout_marginLeft="10dp" android:textColor="@android:color/white" android:drawableLeft="@drawable/ic_action_folder_open" android:background="@drawable/btn_buscar" /> </LinearLayout>

Para dar la forma y agregarle color al botn que realiza la bsqueda dentro de la carpeta drawable del proyecto se debe crear un archivo XML de nombre botn_buscar.xml que contenga el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="@android:color/holo_orange_light"/> <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> </shape>

Para dar la forma y agregarle color al TextView que almacena los resultados de la bsqueda dentro de la carpeta drawable del proyecto se debe crear un archivo XML de nombre txt_filename.xml que contenga el siguiente cdigo.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="@android:color/darker_gray"/> </shape>

Creacin del UI Explorador de Archivos


Un explorador de archivos es bsicamente un listado en el que se puede ir navegando por carpetas hasta encontrar el archivo que se desea, por lo que la interfaz del explorador de archivos contendr un listView.

El cdigo para la creacin de este layout (main_file.xml) es el siguiente:


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/path" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ListView android:id="@android:id/list" android:layout_width="fill_parent"

android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/no_archivos" /> </LinearLayout>

Cdigo del Activity del explorador de archivos


package com.example.exploradorarchivos; import java.io.File; import java.util.ArrayList; import java.util.List; import import import import import import import import import android.app.AlertDialog; android.app.ListActivity; android.content.DialogInterface; android.content.Intent; android.os.Bundle; android.view.View; android.widget.ArrayAdapter; android.widget.ListView; android.widget.TextView;

public class FileExplorerActivity extends ListActivity { private private private private private private List<String> item = null; List<String> path = null; String root="/"; TextView myPath; String archivo_seleccionado; String archivo_nombre;

//Enva los resultados de la bsqueda al activity princial public void finish() { Intent data = new Intent(); data.putExtra("archivo_seleccionado", archivo_seleccionado); data.putExtra("archivo_nombre", archivo_nombre); setResult(RESULT_OK, data); super.finish(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. main_file); myPath = (TextView)findViewById(R.id. path); getDir(root); } //Permite listar todos los directorios de la memoria del dispositivo private void getDir(String dirPath){ myPath.setText(dirPath); item = new ArrayList<String>(); path = new ArrayList<String>(); File f = new File(dirPath);

File[] files = f.listFiles(); if(!dirPath.equals(root)){ item.add(root); path.add(root); item.add("../"); path.add(f.getParent()); } for(int i=0; i < files.length; i++){ File file = files[i]; path.add(file.getPath()); if(file.isDirectory()) item.add(file.getName() + "/"); else item.add(file.getName()); } ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row_file, item); setListAdapter(fileList); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { File file = new File(path.get(position)); if (file.isDirectory()) { if(file.canRead()) getDir(path.get(position)); else { new AlertDialog.Builder(this) .setTitle("[" + file.getName() + "] folder no puede ser leido!") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {} }).show(); } } else { archivo_seleccionado = file.getAbsolutePath(); archivo_nombre = file.getPath();//getName(); finish(); } } }

Cdigo del Activity Principal


package com.example.exploradorarchivos; import android.app.Activity; import android.content.Intent;

import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class PrincipalActivity extends Activity { private Button open_file_explorer; private TextView archivo; private String archivo_seleccionado; private String archivo_nombre; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.principal_main); archivo = (TextView)findViewById(R.id.txtNombreArchivo); open_file_explorer = (Button)findViewById(R.id.btnBuscar); open_file_explorer.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent file_explorer = new Intent(PrincipalActivity.this,FileExplorerActivity.class); startActivityForResult(file_explorer, 555);// <-- ? } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == 555) { if (data.hasExtra("archivo_seleccionado")) { archivo_seleccionado = data.getExtras().getString("archivo_seleccionado"); archivo_nombre = data.getExtras().getString("archivo_nombre"); archivo.setText(archivo_nombre); Toast.makeText(this, archivo_nombre, Toast.LENGTH_SHORT); } } } }

Programa ya en funcionamiento

Explorador de Archivos

Potrebbero piacerti anche