Android Tutorial - Hardware : sdcard

 Load image from mounted sdcard

  

package app.test;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;

public class Test extends Activity {
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          ImageView imgView = (ImageView)findViewById(R.id.image3);
          
          imgView.setImageDrawable(Drawable.createFromPath("/mnt/sdcard/d.jpg") );      
          }
}

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- This file is at /res/layout/list.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"  android:layout_height="fill_parent">
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"  android:layout_height="fill_parent">

  <ImageView android:id="@+id/image1"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    android:src="@drawable/icon"
    />

  <ImageView android:id="@+id/image2"
    android:layout_width="125dip"  android:layout_height="25dip"
    android:src="#555555"
    />
  </LinearLayout>
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"  android:layout_height="fill_parent">

  <ImageView android:id="@+id/image3"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    />

  <ImageView android:id="@+id/image4"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    android:src="@drawable/icon"
    android:scaleType="centerInside"
    android:maxWidth="35dip"  android:maxHeight="50dip"
    />

  </LinearLayout>
</LinearLayout>

Uri for sdcard

  


package app.test;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;

public class Test extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView imgView = (ImageView) findViewById(R.id.image3);

    imgView.setImageURI(Uri.parse("file://mnt/sdcard/d2.jpg"));
  }
}

//main.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- This file is at /res/layout/list.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"  android:layout_height="fill_parent">
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"  android:layout_height="fill_parent">

  <ImageView android:id="@+id/image1"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    android:src="@drawable/icon"
    />

  <ImageView android:id="@+id/image2"
    android:layout_width="125dip"  android:layout_height="25dip"
    android:src="#555555"
    />
  </LinearLayout>
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"  android:layout_height="fill_parent">

  <ImageView android:id="@+id/image3"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    />

  <ImageView android:id="@+id/image4"
    android:layout_width="wrap_content"  android:layout_height="wrap_content"
    android:src="@drawable/icon"
    android:scaleType="centerInside"
    android:maxWidth="35dip"  android:maxHeight="50dip"
    />

  </LinearLayout>
</LinearLayout>

Get SDCard Megs Free

  
//package net.bible.service.common;

import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.preference.PreferenceManager;
import android.util.Log;
//
class CommonUtils {

  private static final int DEFAULT_MAX_TEXT_LENGTH = 250;
  private static final String ELLIPSIS = "...";

  private static final String TAG = "CommonUtils";
  static private boolean isAndroid = false;

  // todo have to finish implementing switchable logging here
  static {
    try {
      if (android.os.Build.ID != null) {
        isAndroid = true;
      }
    } catch (Exception cnfe) {
      isAndroid = false;
    }
    System.out.println("isAndroid:" + isAndroid);
  }

  public static boolean isAndroid() {
    return isAndroid;
  }

  public static boolean isFroyoPlus() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
  }

  public static long getSDCardMegsFree() {
    StatFs stat = new StatFs(Environment.getExternalStorageDirectory()
        .getPath());
    long bytesAvailable = (long) stat.getBlockSize()
        * (long) stat.getAvailableBlocks();
    long megAvailable = bytesAvailable / 1048576;
    Log.d(TAG, "Megs available on SD card :" + megAvailable);
    return megAvailable;
  }

}

SDCard File Util

  

//package edu.dhbw.andobjviewer.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.lang.reflect.Field;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class SDCardFileUtil extends BaseFileUtil {  



  /* (non-Javadoc)
   * @see edu.dhbw.andobjviewer.util.FileUtilInterface#getReaderFromName(java.lang.String)
   */
  public BufferedReader getReaderFromName(String name) {
    if (baseFolder != null) {
      try {
        return new BufferedReader(new FileReader(new File(baseFolder, name)));
      } catch (FileNotFoundException e) {
        return null;
      }
    } else {
      try {
        return new BufferedReader(new FileReader(new File(name)));
      } catch (FileNotFoundException e) {
        return null;
      }
    }
  }
  
  /* (non-Javadoc)
   * @see edu.dhbw.andobjviewer.util.FileUtilInterface#getBitmapFromName(java.lang.String)
   */
  public Bitmap getBitmapFromName(String name) {
    if (baseFolder != null) {
      String path = new File(baseFolder,name).getAbsolutePath();
      return BitmapFactory.decodeFile(path);
    } else {
      return BitmapFactory.decodeFile(name);
    }
  }
}
abstract class BaseFileUtil {
  
  protected String baseFolder = null;

  /* (non-Javadoc)
   * @see edu.dhbw.andobjviewer.util.FileUtilInterface#getBaseFolder()
   */
  public String getBaseFolder() {
    return baseFolder;
  }

  /* (non-Javadoc)
   * @see edu.dhbw.andobjviewer.util.FileUtilInterface#setBaseFolder(java.io.File)
   */
  public void setBaseFolder(String baseFolder) {
    this.baseFolder = baseFolder;
  }

  /**
   * get an reader through it's filename
   * @param name
   * @return may be null, in case of an exception 
   */
  public abstract BufferedReader getReaderFromName(String name);

  /**
   * get a bitmap object through an filename.
   * @param name
   * @return may be null, in case of an exception 
   */
  public abstract Bitmap getBitmapFromName(String name);

}

create File In SDCard

  
//package ping.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import android.os.Environment;

public class FileUtils {
  private String SDCardRoot;

  public FileUtils() {
    SDCardRoot = Environment.getExternalStorageDirectory()
        .getAbsolutePath()
        + "/";
    System.out.println("SD dir:" + SDCardRoot);
  }

  public File createFileInSDCard(String fileName, String dir)
      throws IOException {
    File file = new File(SDCardRoot + dir + File.separator + fileName);
    file.createNewFile();
    return file;
  }

  public File createSDDir(String dir) {
    File dirFile = new File(SDCardRoot + dir + File.separator);
    System.out.println("creat dir:" + dirFile.mkdirs());
    return dirFile;
  }

  public boolean isFileExist(String fileName, String path) {
    File file = new File(SDCardRoot + path + File.separator + fileName);
    return file.exists();
  }

  public File write2SDFromInput(String path, String fileName,
      InputStream input) {
    File file = null;
    OutputStream output = null;
    try {
      createSDDir(path);
      file = createFileInSDCard(fileName, path);
      output = new FileOutputStream(file);
      byte buffer[] = new byte[4 * 1024];
      int temp;
      while ((temp = input.read(buffer)) != -1) {
        output.write(buffer, 0, temp);
      }
      output.flush();
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      try {
        output.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

    return file;
  }

}

export the current database to the SDcard

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.os.Environment;
import android.util.Log;

// Class to export the current database to the SDcard.
public class SDUtils {
  private static final String TAG = "SDUtils";

  public static boolean writeToSD(String outputFileName, String packageName,
      String data) {
    return writeToSD(outputFileName, packageName, data.getBytes());
  }

  public static boolean writeToSD(String outputFileName, String packageName,
      byte[] data) {
    // FIXME: Make this a separate thread.
    try {
      File sd = Environment.getExternalStorageDirectory();
      Log.d(TAG, "writeToSD: databaseName: " + outputFileName);

      if (sd.canWrite()) {
        String filePath = new String(packageName.substring(packageName
            .lastIndexOf('.') + 1));
        File extDBDir = new File(sd, filePath);
        File extDBFile = new File(sd, filePath + "/" + outputFileName);

        Log.d(TAG, "writeToSD: filePath: " + filePath);
        Log.d(TAG, "writeToSD: extDBFile: " + extDBFile);

        if (!extDBDir.exists()) {
          Log.d(TAG, "Creating directory: "
              + extDBDir.getAbsolutePath());
          if (!extDBDir.mkdir()) {
            Log.e(TAG, "Directory creation failed.");
          }
        } else {
          Log.d(TAG, "writeToSD: Directory creation skipped.");
        }

        try {
          Log.d(TAG, "writeToSD: Creating new file: "
              + extDBFile.getAbsolutePath());
          // extDBFile.delete();
          extDBFile.createNewFile();
        } catch (IOException e) {
          Log.d(TAG, "writeToSD: " + e.toString());
        } catch (SecurityException e) {
          Log.d(TAG, "writeToSD: " + e.toString());
        }

        // ByteBuffer src = ByteBuffer.wrap(data);
        // byte[] bSrc = src.array();
        // Log.d(TAG, "bSrc is " + bSrc.length + " bytes in size.");
        FileOutputStream fileOutStream = new FileOutputStream(extDBFile);
        // BufferedOutputStream bos = new BufferedOutputStream(
        // fileOutStream);

        // FileChannel dst = new
        // FileOutputStream(backupFile).getChannel();
        Log.d(TAG, "About to write to file.");
        fileOutStream.write(data);
        Log.d(TAG, "Wrote to file.");
        fileOutStream.flush();
        fileOutStream.close();
        Log.d(TAG, "Closed file.");

        extDBFile = new File(sd, filePath + "/" + outputFileName);
        if (!extDBFile.exists()) {
          Log.e(TAG, "Downloaded file doesn't exist.");
        }
        if (extDBFile.length() != data.length) {
          Log.e(TAG, "Downloaded file doesn't match size.");
        } else {
          Log
              .v(TAG, "File on SD card is size: "
                  + extDBFile.length());
        }

        return true;
      }
    } catch (Exception e) {
      Log.e(TAG, "WriteToSD threw exception: " + e.toString());
    }
    return false;
  }

  /**
   * 
   * @param filename
   */
  public static void makeReadOnly(String filename) {
    File file = new File(filename);
    if (!file.exists())
      return;
    file.setReadOnly();
  }
}

get Sd card Path

   
import java.io.File;

import android.os.Environment;

class Common {
  public static String getSdcardPath() {
    File sdDir = null;
    boolean sdCardExist = Environment.getExternalStorageState().equals(
        android.os.Environment.MEDIA_MOUNTED); 
    if (sdCardExist) {
      sdDir = Environment.getExternalStorageDirectory();
    }

    return sdDir.toString() + "/";
  }
}