Android编程之Sdcard相关代码集锦_Android

本文实例讲述了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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
sdcard
android sdcard、android sdcard 路径、android sdcard 权限、android sdcard disk、android 格式化sdcard,以便于您获取更多的相关知识。

时间: 2024-07-28 17:20:00

Android编程之Sdcard相关代码集锦_Android的相关文章

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. 获得程序在s

Android编程之MD5加密算法实例分析_Android

本文实例分析了Android编程之MD5加密算法.分享给大家供大家参考,具体如下: Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包.实际上与J2SE平台一模一样. 算法签名: 复制代码 代码如下: String getMD5(String val) throws NoSuchAlgorithmException 输入一个String(需要加密的文本),得到一个加密输出String(加密后的文本) pa

Android编程之ListPreference用法实例分析_Android

本文实例讲述了Android编程之ListPreference用法.分享给大家供大家参考,具体如下: 先展示一下效果图,如下所示: 项目代码如下: package com.my.listpreference; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.On

Android编程之Animation动画详解_Android

本文实例讲述了Android编程之Animation动画用法.分享给大家供大家参考,具体如下: Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展

Android编程之View简单学习示例_Android

本文实例讲述了Android编程之View简单学习示例.分享给大家供大家参考,具体如下: View,是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展. 在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 游戏的核心是不断地绘图和刷新界面,An

Android编程之SurfaceView实例详解_Android

本文实例讲述了Android编程之SurfaceView用法.分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在UI线程中刷新,而SurfaceView可以在子线程中刷新 2. SurfaceView可以控制刷新频率 SurfaceView几个重要的方法: 1. 继承SurfaceView 后调用getHolder()方法可以获取到mSurfaceHolder对象这个对于可以控制SurfaceView的绘制 2

android编程之menu按键功能实现方法_Android

本文实例讲述了android编程之menu按键功能实现方法.分享给大家供大家参考.具体分析如下: android应用程序可以通过menu按键弹出菜单,现在通过menu按键弹出一个拥有两个选项的菜单.点击第一个按键,文本框会显示"第1个按键",点击第二个按键,文本框会显示"第2个按键" package com.test_menu; import android.app.Activity; import android.os.Bundle; import android

Android编程之图片相关代码集锦

本文实例总结了Android编程之图片相关代码.分享给大家供大家参考,具体如下: 1. Bitmap转化为字符串: /** * @param 位图 * @return 转化成的字符串 */ public static String bitmapToString(Bitmap bitmap) { // 将Bitmap转换成字符串 String string = null; ByteArrayOutputStream bStream = new ByteArrayOutputStream(); bi

Android编程之OpenGL绘图技巧总结_Android

本文实例讲述了Android编程之OpenGL绘图技巧.分享给大家供大家参考,具体如下: 很久不用OpenGL ES绘图,怕自己忘记了,于是重新复习一遍,顺便原理性的东西总结如下: 1. Android 3D坐标系统 如图: Android的三维坐标系统中: 坐标原点位于中央, X轴从左向右延伸,原点左边的值为负数,右边为正数: Y轴从下向上延伸,原点下边的值为负数,上边为正数: Z轴屏幕里面向外面延伸,屏幕里面为负数,外面为正数. 2. 开发工具(OpenGL和OpenGL ES)介绍Open