Search This Blog

Friday 13 April 2012

Android File explorer example i.e pick image, video, Audio from android sdcards

In android we know sdcard is main drive to store information. Sometimes we need to read/write file from sdcard. In this case we can give static path and easily can read/write using FileInputStream and FileOutputStream. But in most case we need to select it  dynamically on user demand.After selecting it we can modify it, we can share or we can send it to anywhere

So today I am going to make a simple application like File-explorer. It will help in my next Article Ziping and Unziping Folder in android.


Step1) Create one project File-Explorer 


Step 2) Change your activity to following code

package com.AndroidExplorer;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

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

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.explorer);
  myPath = (TextView) findViewById(R.id.path);
  getDir(root);
 }
 private void getDir(String dirPath) {
  myPath.setText("Location: " + 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.explorer_row, item);
  setListAdapter(fileList);
         }
       File file;
       @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
 file = new File(path.get(position));
  if (file.isDirectory()) {
    if (file.canRead())
    getDir(path.get(position));
   else {
    new AlertDialog.Builder(this)
    .setIcon(R.drawable.icon)
    .setTitle("[" + file.getName()+ "] folder can't be read!")
    .setPositiveButton("OK",new DialogInterface.OnClickListener() {
       @Override public void onClick(DialogInterface dialog,int which) {
     }}).show();
   }
  } else {
      new AlertDialog.Builder(this)
     .setIcon(R.drawable.icon)
     .setTitle("Select")
     setMessage("Select " + file.getName() + "to server ?")
    .setPositiveButton("Select",new DialogInterface.OnClickListener() {
         @Override public void onClick(DialogInterface dialog,int which) {
  Toast.makeText(
                     AndroidExplorer.this,"" + file.getAbsolutePath()+ " iss selected ",300)
           .show();
     }
 })
 .setNegativeButton("No",new DialogInterface.OnClickListener() {
  @Override
          public void onClick(DialogInterface dialog,int which) {
         dialog.dismiss();
      }
   }).show();
  }
     }
      } 


Step 3)Now our coding part has been done.

We will create two xml. As i have take one List-Activtiy   so it need two layout one main.xml and another one to inflating into ListView row.Click me for advance ListView

  • explorer.xml inside res/layout folder
<?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" 
    android:cacheColorHint="#B26B00"
    android:fadingEdge="none"
 />
<TextView
 android:id="@android:id/empty"
 android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="No Data"
 />
</LinearLayout>
  • explorer_row in same folder
<?xml version="1.0" encoding="utf-8"?>
<TextView 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/rowtext" android:padding="10dp"
  android:background="#C0C0C0" android:textColor="#000"
  android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:textSize="23sp" />

Now enjoy you can download this complete project from this link.

                                      Download this Project


These are the screen shot of that project




1 comment:

  1. Thanks a lot. Used it in my app with some tweaks - file filter, sorting and return path.

    ReplyDelete

Feedback always help in improvement. If you have any query suggestion feel free to comment and Keep visiting my blog to encourage me to blogging

Android News and source code