当前位置: 首页 > 编程笔记 >

Android编程之Sdcard相关代码集锦

充运浩
2023-03-14
本文向大家介绍Android编程之Sdcard相关代码集锦,包括了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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍Android编程之图片相关代码集锦,包括了Android编程之图片相关代码集锦的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了Android编程之图片相关代码。分享给大家供大家参考,具体如下: 1. Bitmap转化为字符串: 2.字符串转化为Bitmap: 3.Bitmap转化为Drawable: 根据图片资源ID获取Drawable对象: byte数组转换Drawble

  • 本文向大家介绍Android开发中编写蓝牙相关功能的核心代码讲解,包括了Android开发中编写蓝牙相关功能的核心代码讲解的使用技巧和注意事项,需要的朋友参考一下 一. 什么是蓝牙(Bluetooth)? 1.1  BuleTooth是目前使用最广泛的无线通信协议 1.2  主要针对短距离设备通讯(10m) 1.3  常用于连接耳机,鼠标和移动通讯设备等. 二. 与蓝牙相关的API 2.1 Blu

  • 本文向大家介绍JAVA及相关字符集编码问题研究分享,包括了JAVA及相关字符集编码问题研究分享的使用技巧和注意事项,需要的朋友参考一下 下面本文将针对以上几点问题进行描述讨论,我们就以“中文”两个字为例来说明,查找相关资料可知“中文”的GB2312编码是“d6d0 cec4”,为Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e69687"。(注意,“中文”这两个字没有i

  • Open-Falcon数据收集,分为[绘图数据]收集和[报警数据]收集。下面介绍,如何验证两个链路的数据收集是否正常。 如何验证[绘图数据]收集是否正常 数据链路是:agent->transfer->graph->query->dashboard。graph有一个http接口可以验证agent->transfer->graph这条链路,比如graph的http端口是6071,可以这么访问验证: #

  • 本文向大家介绍Lua中编译执行代码相关的函数详解,包括了Lua中编译执行代码相关的函数详解的使用技巧和注意事项,需要的朋友参考一下 可以说Lua之所以称为是一种解释型的语言,正是因为有诸如load这样的函数,因为这样的函数使得Lua可以执行动态生成的代码。下面具体来分析这些函数。 load函数    load函数原型如下:  该函数加载一个chunk,如果没有错误,则返回一个函数。如果传入chun

  • 我是android新手,正在处理一个广播互联网连接状态的应用程序。我使用了一个不推荐使用的方法isConnectingOrConnected()。我无法修复我的代码,它令人困惑。请查看我的代码并帮我解决问题。真心感谢任何帮助 这是我的连接接收器代码 这是我的主要活动