Android编程之Sdcard相关代码集锦

本文实例讲述了Android编程之Sdcard相关代码。分享给大家供大家参考,具体如下:

1. 检测Sdcard是否可用:

public static boolean sdCardIsAvailable() {
  String status = Environment.getExternalStorageState();
  if (!status.equals(Environment.MEDIA_MOUNTED)) {
   return false;
  }
  return true;
}

2. 获得程序在sd卡上的cahce目录:

private static boolean hasExternalCacheDir() {
  return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;
}
/**
* @param context 上下文
* @return The external cache dir SD卡路径
*/
private static String getExternalCacheDir(Context context) {
  // android 2.2 以后才支持的特性
  if (hasExternalCacheDir()) {
   return context.getExternalCacheDir().getPath() + File.separator + "gesture";
  }
  // Before Froyo we need to construct the external cache dir ourselves
  // 2.2以前我们需要自己构造
  final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/gesture/";
  return Environment.getExternalStorageDirectory().getPath() + cacheDir;
}

3. 获取Sdcard的实际空间大小:

public static long getRealSizeOnSdcard() {
  File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long availableBlocks = stat.getAvailableBlocks();
  return availableBlocks * blockSize;
}

----->检测Sdcard是否有足够的空间:

/**
* @param updateSize 指定的检测空间大小
* @return True 空间足够返回true,不足返回false
*/
public static boolean enoughSpaceOnSdCard(long updateSize) {
  String status = Environment.getExternalStorageState();
  if (!status.equals(Environment.MEDIA_MOUNTED))
   return false;
  return (updateSize < getRealSizeOnSdcard());
}

4. 获取手机的存储大小:

public static long getRealSizeOnPhone() {
  File path = Environment.getDataDirectory();
  StatFs stat = new StatFs(path.getPath());
  long blockSize = stat.getBlockSize();
  long availableBlocks = stat.getAvailableBlocks();
  long realSize = blockSize * availableBlocks;
  return realSize;
}

---->检测手机存储是否有足够的空间:

/**
* @param updateSize 指定的检测空间大小
* @return 空间足够返回true,不足返回false
*/
public static boolean enoughSpaceOnPhone(long updateSize) {
  return getRealSizeOnPhone() > updateSize;
}

附带点很久之前的记忆小赠品:

1. 在Android.mk中加入LOCAL_CERTIFICATE := platform就可以使用系统隐藏api(@hide)。

2.Activity的启动模式总结:

1). standard:

堆栈(task):与应用程序的其他已启动过的Activity在同一个堆栈

实例创建:每次启动都会创建新的实例

2). singleTop:

堆栈(task):与应用程序的其他已启动过的Activity在同一个堆栈

实例创建:启动时,检查是否有该Activity的实例在当前的栈顶(启动过的记录)。若有,则不再创建新实例,若无,则重新创建新实例,置于栈顶。

3). singleTask:

堆栈(task): 与应用程序的其他已启动过的Activity在同一个堆栈

实例创建:启动时,检查task中是否有该Activity的实例。若有,则将task中在该Activity实例之上的所有其他Activity实例统统出栈(pop),
 使其在栈顶。若无,则重新创建该Activity实例,置于栈顶。

4). singleInstance:

堆栈(task):与另外其他三种模式不同,会新建一个task,将Acitvity放置于这个新的task中,并保证不再有其他Activity实例进入.

实例创建:第一次创建时,会新建一个task,将其至于新的task中。若实例已存在,在启动时,无需再创建新实例,复用之前已创建的实例。

3.设置Activity的背景为手机桌面的背景:

在setContentView方法之前添加getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER),

然后在AndroidManifest.xml文件中添加android:theme="@android:style/Theme.Translucent"属性,实现将该Activity设置为透明。

4.查看手机内存空间代码long freeMemory = Runtime.getRuntime().freeMemory();

5.关于Android主线程:

android中的主线程是UI线程,它是针对android中的UI组件操作的线程,而android中UI组件操作要求是非线程安全的,

毕竟UI组件的更新操作要求快速响应,如果更新时考虑线程安全,同步锁等待响应之类的,那么UI组件的更新响应就有可能会延迟,
  这样话就不符合Android要求尽可能规避的ANR异常。

6.Android4.4系统发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。

7. 引用相关:

SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法。

WeakReference<T>:弱引用-->随时可能会被垃圾回收器回收。

softReference多用作来实现cache机制,weakReference一般用来防止内存泄漏,要保证内存被VM回收 .

8.TCP和UDP

由于面向连接的TCP协议在发生数据丢包时,会要求重传,这会

影响视频的实时性。UDP由于其是面向事务的,且简单不可靠的传输协议,

在传输视频数据当中具有快捷,消耗资源小的特点,简单的传输过程中产生的

丢包和乱序是可以在视频接收端处理的。所以一般采用UDP协议作为多媒体通信的传输层协议。

9.内存相关:

1). 一个进程的内存可以由2个部分组成:java 使用内存 ,C 使用内存 ,

这两个内存的和必须小于16M(16M是怎么来的?算是实验来的吧,每个机型不一样,模拟器不同版本也不一样,可以通过:
Runtime.getMaxMemory() 来查看。),不然就会出现大家熟悉的OOM,这个就是第一种OOM的情况。

2). 更加奇怪的是这个:一旦内存分配给Java后,以后这块内存即使释放后,也只能给Java的使用,这个估计跟java虚拟机里把内存分成好几块进行缓存的原因有关,反正C就别想用到这块的内存了。

10.获取底部虚拟按键高度(针对没有物理按键的手机):

/**
* 获取底部虚拟按键高度(针对没有物理按键的手机)
* @return
*/
private int getNavigationBarHeight() {
  int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
  if (resourceId > 0) {
   return getResources().getDimensionPixelSize(resourceId);
  }
  return 0;
}

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法

    本文实例讲述了Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法.分享给大家供大家参考,具体如下: private void CopyAssets(String assetDir, String dir) { String[] files; try { // 获得Assets一共有几多文件 files = this.getResources().getAssets().list(assetDir); } catch (IOException e1) { ret

  • Android中删除sdcard里文件的命令

    有时我们需要删除android模拟器或手机上的sd卡文件,特别是模拟器上的,这时我们就需要借助于一些命令来帮助我们删除文件. 复制代码 代码如下: #重新挂载模拟器 adb remount   #开始shell命令 adb shell   #进入到sdcard卡目录 cd sdcard #将列出所有文件夹 ls   #删除文件或文件夹 rm -r (文件夹名称)

  • android中把文件保存到sdcard代码实例

    直接上代码: package com.example.test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import andr

  • android读取Assets图片资源保存到SD卡实例

    复制代码 代码如下: public class ReadBitmap { public void readByte(Context c, String name, int indexInt) { byte[] b = null; int[] intArrat = c.getResources().getIntArray(indexInt); try { AssetManager am = null; am = c.getAssets(); InputStream is = am.open(nam

  • Android获取SD卡路径及SDCard内存的方法

    本文实例讲述了Android获取SD卡路径及SDCard内存的方法.分享给大家供大家参考.具体分析如下: 昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); 后来发现这样写虽然一般不会出错,但不是很好,因为不同相机,可能路径会出问题.较好的方法是通过Environment 来获取路径,最后给出一个例子,教你怎样获取SDCard 的内存,显示出来告诉用

  • Android开发之资源目录assets与res/raw的区别分析

    本文实例讲述了Android开发之资源目录assets与res/raw的区别.分享给大家供大家参考,具体如下: assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASSETS支持任意深度的子目录.这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名. res:用于存放应用程序的资源(如图标.GUI布局等),将被打包到编译后的Java中.不支持深度子目录 res/menu:存放基于XML的菜单描述: res/raw:存放通

  • Android实现内存中数据保存到sdcard的方法

    本文实例讲述了Android实现内存中数据保存到sdcard的方法.分享给大家供大家参考,具体如下: public static void writeToSdCard(String s) { try { File dst = new File("/sdcard/test_sensor/" + mName + ".txt"); File parent = dst.getParentFile(); if(!parent.exists()) { parent.mkdirs

  • Android对sdcard扩展卡文件操作实例详解

    Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意.比如: 1.加入sdcard操作权限: 2.确认sdcard的存在: 3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件: 实例如下: (1)在AndroidManifest.xml添加sdcard操作权限 <!-- sdcard权限 --> <uses-permission android:name="android.permission.WRITE_EXT

  • 基于android中读取assets目录下a.txt文件并进行解析的深入分析

    android读取assets文件下的内容,一般都是使用getAsset.open()方法,并将文件的路径作为参数传入,而当我们解析一个目录下的文件时需要对其进行解析时,比如:a.txt文件的内容为:nameandroid,liuclass1,2,3,4这些文件有时就像是数据库文件的格式一样,我们就需要对其进行解析.我们知道获取assets文件后返回的是一个inputstream而不是一个file类型,所以我们需要对inputstream进行解析.主要分为两个阶段:第一个阶段为:去换行符,第二个

  • Android实现把文件存放在SDCard的方法

    本文实例讲述了Android实现把文件存放在SDCard的方法.分享给大家供大家参考.具体如下: 使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的.对于像视频这样的大文件,我们可以把它存放在SDCard. SDCard是干什么的?你可以把它看作是移动硬盘或U盘. 在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件).创建

  • Android读取assets目录下的所有图片并显示的方法

    本文实例讲述了Android读取assets目录下的所有图片并显示的方法.分享给大家供大家参考.具体方法分析如下: 在assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件. 1. 先在Activity里面调用getAssets() 来获取AssetManager引用. 2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStrea

随机推荐