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() + "/"; } }