- 浏览: 365755 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
驭乐MJ:
你好,我卸载rar后,按命令执行安装unrar或者是p7zip ...
Ubuntu rar 乱码问题 -
郭建雄:
不错,受用了,谢谢你的分享 !
java线程中的interrupt,isInterrupt,interrupted方法 -
zuosheng:
...
用ViewFlipper实现各种切换动画 -
lxtkong-029:
原来一直不是很清楚,看来你的文章明白了,太感谢了!
java线程中的interrupt,isInterrupt,interrupted方法 -
ihopethatwell:
嗯,看到了,要在项目中添加jni
Ubuntu 10.04安装android NDK
继上篇音乐播放器,我们讲到使用 SDCard 播放音乐的例子,上篇也将如何在 Android 模拟器中创建 SDCard 的步骤列了出来。本篇将扩展上篇例子,去获取SDCard 的所存内存,显示出来告诉用户。本篇讲述的内容如下:
- 1、讲述 Environment 类。
- 2、讲述 StatFs 类。
- 3、完整例子读取 SDCard 内存
1、讲述 Environment 类
Environment 是一个提供访问环境变量的类。
Environment 包含常量:
- MEDIA_BAD_REMOVAL
解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除 -
MEDIA_CHECKING
解释:返回getExternalStorageState() ,表明对象正在磁盘检查。 -
MEDIA_MOUNTED
解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限 -
MEDIA_MOUNTED_READ_ONLY
解释:返回getExternalStorageState() ,表明对象权限为只读 -
MEDIA_NOFS
解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。 -
MEDIA_REMOVED
解释:返回getExternalStorageState() ,如果不存在 SDCard 返回 -
MEDIA_SHARED
解释:返回getExternalStorageState() ,如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回 -
MEDIA_UNMOUNTABLE
解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装 -
MEDIA_UNMOUNTED
解释:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard 是存在但是没有被安装
Environment 常用方法:
- 方法:getDataDirectory()
解释:返回 File ,获取 Android 数据目录。 - 方法:getDownloadCacheDirectory()
解释:返回 File ,获取 Android 下载/缓存内容目录。 - 方法:getExternalStorageDirectory()
解释:返回 File ,获取外部存储目录即 SDCard - 方法:getExternalStoragePublicDirectory(String type)
解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件 - 方法:getExternalStorageState()
解释:返回 File ,获取外部存储设备的当前状态 - 方法:getRootDirectory()
解释:返回 File ,获取 Android 的根目录
2、讲述 StatFs 类
StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 常用方法:
-
getAvailableBlocks()
解释:返回 Int ,获取当前可用的存储空间 -
getBlockCount()
解释:返回 Int ,获取该区域可用的文件系统数 -
getBlockSize()
解释:返回 Int ,大小,以字节为单位,一个文件系统 -
getFreeBlocks()
解释:返回 Int ,该块区域剩余的空间 -
restat(String path)
解释:执行一个由该对象所引用的文件系统
3、完整例子读取 SDCard 内存
存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。代码如下:
package com.terry;
import java.io.File;
import java.text.DecimalFormat;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class getStorageActivity extends Activity {
private Button myButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
viewHolder.myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getSize();
}
});
}
void findView(){
viewHolder.myButton=(Button)findViewById(R.id.Button01);
viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);
viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);
}
void getSize(){
viewHolder.myTextView.setText("");
viewHolder.myBar.setProgress(0);
//判断是否有插入存储卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File path =Environment.getExternalStorageDirectory();
//取得sdcard文件路径
StatFs statfs=new StatFs(path.getPath());
//获取block的SIZE
long blocSize=statfs.getBlockSize();
//获取BLOCK数量
long totalBlocks=statfs.getBlockCount();
//己使用的Block的数量
long availaBlock=statfs.getAvailableBlocks();
String[] total=filesize(totalBlocks*blocSize);
String[] availale=filesize(availaBlock*blocSize);
//设置进度条的最大值
int maxValue=Integer.parseInt(availale[0])
*viewHolder.myBar.getMax()/Integer.parseInt(total[0]);
viewHolder.myBar.setProgress(maxValue);
String Text="总共:"+total[0]+total[1]+"\n"
+"可用:"+availale[0]+availale[1];
viewHolder.myTextView.setText(Text);
}else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
Toast.makeText(getStorageActivity.this, "没有sdCard", 1000).show();
}
}
//返回数组,下标1代表大小,下标2代表单位 KB/MB
String[] filesize(long size){
String str="";
if(size>=1024){
str="KB";
size/=1024;
if(size>=1024){
str="MB";
size/=1024;
}
}
DecimalFormat formatter=new DecimalFormat();
formatter.setGroupingSize(3);
String result[] =new String[2];
result[0]=formatter.format(size);
result[1]=str;
return result;
}
}
import java.io.File;
import java.text.DecimalFormat;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class getStorageActivity extends Activity {
private Button myButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findView();
viewHolder.myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
getSize();
}
});
}
void findView(){
viewHolder.myButton=(Button)findViewById(R.id.Button01);
viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);
viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);
}
void getSize(){
viewHolder.myTextView.setText("");
viewHolder.myBar.setProgress(0);
//判断是否有插入存储卡
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File path =Environment.getExternalStorageDirectory();
//取得sdcard文件路径
StatFs statfs=new StatFs(path.getPath());
//获取block的SIZE
long blocSize=statfs.getBlockSize();
//获取BLOCK数量
long totalBlocks=statfs.getBlockCount();
//己使用的Block的数量
long availaBlock=statfs.getAvailableBlocks();
String[] total=filesize(totalBlocks*blocSize);
String[] availale=filesize(availaBlock*blocSize);
//设置进度条的最大值
int maxValue=Integer.parseInt(availale[0])
*viewHolder.myBar.getMax()/Integer.parseInt(total[0]);
viewHolder.myBar.setProgress(maxValue);
String Text="总共:"+total[0]+total[1]+"\n"
+"可用:"+availale[0]+availale[1];
viewHolder.myTextView.setText(Text);
}else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
Toast.makeText(getStorageActivity.this, "没有sdCard", 1000).show();
}
}
//返回数组,下标1代表大小,下标2代表单位 KB/MB
String[] filesize(long size){
String str="";
if(size>=1024){
str="KB";
size/=1024;
if(size>=1024){
str="MB";
size/=1024;
}
}
DecimalFormat formatter=new DecimalFormat();
formatter.setGroupingSize(3);
String result[] =new String[2];
result[0]=formatter.format(size);
result[1]=str;
return result;
}
}
TIP:要判断手机是否安装了存储卡,可通过 Environment.getExternalStorageState()方法来判断存储卡的状态。
如果你不知道如何创建 SDCard 你可回头看我上篇文章:点击这里
实例运行效果如图
上篇放了两首歌和一个30多M的音频文件,之前创建时给的500MB空间,现在剩下的刚好。
转自:http://www.cnblogs.com/TerryBlog/archive/2010/06/27/1766363.html
- getSdCardStorage.rar (43.6 KB)
- 下载次数: 0
发表评论
-
通过FutureTask设置超时,用于请求网络,执行任何异步超时任务
2013-10-10 15:53 0public class TestConnectTimeOu ... -
使用Eclipse调试Android Native Application
2013-07-08 21:31 0由于最近需要调试C++程序,以后都是暴力调试的,暴力调 ... -
Android新版NDK环境配置(免Cygwin)
2013-07-05 08:41 0前言:Android NDK r7及以上的版本已经集成 ... -
scroller 滚动效果
2013-04-25 14:22 0package com.testalaph; i ... -
点9 ondraw bitmap
2013-04-17 14:26 0private void init(Context ... -
点9 ondraw bitmap
2013-04-17 14:20 0点9图片ondraw画: private void ... -
通过activityGroup动态管理activity
2013-01-20 15:54 0// @Override // protected v ... -
scroller text view 滚动文字
2012-12-08 10:18 0package com.sc; import an ... -
android 截屏
2012-11-05 14:16 0//截屏2 private Bitmap jieping2 ... -
Android下Dialog及Activity屏蔽Home键详解
2011-12-13 11:53 0屏蔽其他键,重写onKeyDown Java代码 ... -
clipRect 介绍
2011-12-02 14:13 6729android的clip有以下两点疑问: Clip(剪切)的 ... -
android知识整理
2011-11-03 10:06 11. android单实例运行方 ... -
Android 使用junit测试
2011-08-05 16:18 954使用方式也非常的简单,只需要在AndroidManifest ... -
Android开发:调试工具集
2011-08-05 15:07 18341. 查看当前堆栈1) 功能:在程序中加入代码,使可以在log ... -
Android中attr自定义属性详解
2011-07-12 16:23 38788<LinearLayout xmlns:android= ... -
Drawable Mutations(Android Drawable 深入分析)
2011-07-11 11:08 1658Android's drawables对编写 ... -
检查系统是否安装某app
2011-07-11 10:45 965/** * Indicates whether th ... -
ImageView的scaletype属性
2011-07-07 13:21 862ImageView的属性android:scaleType ... -
Android UI --- 设置ProgressBar的颜色
2011-07-04 14:26 1285基本原理是在drawable目录中建立一个xml文件,描述一下 ... -
关于android的ListView优化
2011-06-24 16:58 11241.去除ListView的黑色间隔线 vie ...
相关推荐
标题提到的"Android解析如何获取SDCard内存项目源代码"显然是一个示例项目,提供了实现这一功能的源代码。下面将详细解释这个过程涉及的知识点。 1. **Android存储体系**: Android设备有两种主要的存储类型:内部...
Android 解析如何检测获取SDCard内存剩余空间,用到了Environment 类、StatFs 类。SDCard存储卡在 Android 手机上是可以随时插拔的,每次的动作都会引起Android系统ACTION_BROADCAST,本例子将计算出 SDCard 的剩余...
对于大型XML文件,SAX解析器的性能优势明显,因为它不会一次性加载整个文件到内存中。通过事件驱动的方式,我们可以高效地处理XML内容,同时在SD卡上进行数据存取,充分利用Android设备的存储空间。 在实际项目中,...
本文将详细解析如何通过编写工具类来获取SD卡(外部存储)和手机内存(内部存储)的大小信息。我们将分析提供的`SDCardUtil`类,并解释其中的关键代码和相关API。 首先,`SDCardUtil`类包含两个静态方法:`...
综上所述,"android显示sdcard上的图片"这一主题涵盖了Android系统中的文件访问、图片解析、内存管理、UI显示、异步处理等多个技术环节。通过熟练掌握这些知识点,开发者可以构建出高效且用户友好的图片显示功能。在...
本文将深入探讨Android图片缓存的优化策略,包括内存缓存和SDCard缓存,并以此为例详细解析`ImagesCache`这个项目。 内存缓存: 内存缓存是为了快速访问图片而设计的,它将图片数据存储在应用程序的内存中。当用户...
3. **优化内存**:注意管理好`Bitmap`对象,避免内存泄漏,可以使用`Bitmap.recycle()`回收资源。 总结,Android应用可以通过原生API轻松地读取assets和sdcard中的ini文件,以及处理图像资源。理解这些基本操作对于...
6. **文本处理库**:对于复杂的文本处理任务,如解析特定格式的文件(如CSV或JSON),可以使用第三方库,如Gson、Jackson或OpenCSV。 7. **性能优化**:在大量文件操作时,注意使用高效的算法,避免一次性加载所有...
1. 获取SD卡路径:在Android中,我们可以通过`Environment.getExternalStorageDirectory()`方法获取SD卡的根目录。确保在AndroidManifest.xml中添加了写外部存储的权限`...
在SD卡上读取文件通常使用`Environment.getExternalStorageDirectory()`获取根目录,然后根据需要构建子目录路径。例如,读取图片文件: ```java String filePath = Environment.getExternalStorageDirectory() + ...
这些库可以解析MP3文件并将其转换为PCM(脉冲编码调制)数据,STM32再将PCM数据发送给音频功放,通过耳机插座输出声音。解码过程中,STM32需要有足够的计算能力和内存资源来处理复杂的解码算法。 为了实现上电后...
下面将详细解析标题、描述以及部分文本中的关键知识点。 ### 内存卡修改概述 #### 一、内存卡修改背景 在某些情况下,用户可能会遇到内存卡读写速度慢、空间分配不合理等问题,这时就需要对内存卡进行相应的修改以...
《S3C6410 SD卡驱动与裸代码解析》 在嵌入式系统开发领域,S3C6410是一款广泛应用的处理器,它以其高性能和低功耗特性,广泛应用于移动设备和嵌入式设备。在该处理器平台上,SD卡(Secure Digital Card)作为常见的...
**DOM解析**(Document Object Model)是一种将整个XML文档加载到内存中并创建一个树形结构的解析方式,方便遍历和操作整个文档。以下是一个使用DOM解析XML的示例: ```java // DOM解析XML public String ...
- **配置文件**:包括Nios II处理器的中断控制器配置、内存映射等设置。 - **编译和烧录工具链**:如Quartus II或Intel FPGA SDK for OpenCL,用于编译和下载代码到FPGA。 5. **开发流程** 开发过程一般包括: ...
标题中的“gps.zip_2148 IAP_LPC...开发者可以利用其中的链接脚本来优化内存使用,利用GPS程序来获取和处理位置信息,并通过USB接口与外部设备交换数据。这种系统在移动设备、跟踪装置、智能交通系统等领域有广泛应用。
DOM解析器将整个XML文档加载到内存中,形成一棵树形结构,可以方便地遍历和修改。而SAX是一种事件驱动的解析方式,逐行处理XML,适用于处理大型文件。XmlPullParser是基于拉模式的解析器,更高效且内存占用较低,...
1. DOM解析:DOM解析器将整个XML文件加载到内存中,形成一棵DOM树。这使得我们可以对XML进行随机访问,但同时也会消耗大量内存。以下是一个使用DOM解析XML的基本流程: ```java DocumentBuilderFactory factory = ...
- **res/xml**:用于存放应用的资源文件,可以直接通过`getXml(int id)`获取解析器对象。 - **res/raw**:存放未经编译的文件,可通过`openRawResource(int id)`获取输入流。 - **SDcard或应用data目录**:这些...
以下是对如何在Android中读取内存卡文件的详细解析,包括代码示例、原理说明以及注意事项。 ### 知识点一:理解ContentResolver与ContentProvider 在Android中,为了确保应用之间的数据隔离和安全,系统采用了一套...