安卓应用开发实战:[12]保存文件到SD卡

2025-10-24 11:18:56

1、通过查看安卓系统的设置程序功能,可以设想我们可以通过分析安卓系统的设置程序的源代码,得到获取存储设备信息部分的主要代码。

安卓应用开发实战:[12]保存文件到SD卡

2、为了简单起见,我设计了如图所示的简单布局文件,xml文件如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#000000" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="5dp" > <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SD卡总空间:" android:textSize="20dp" android:textColor="#ffffff" /> <TextView android:id="@+id/tvSdTotalSize" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="100MB" android:textSize="20dp" android:textColor="#ffffff"/> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SD卡剩余空间:" android:textSize="20dp" android:textColor="#ffffff" /> <TextView android:id="@+id/tvSdAvailSize" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="100MB" android:textSize="20dp" android:textColor="#ffffff"/> </TableRow> </LinearLayout>

安卓应用开发实战:[12]保存文件到SD卡

3、主要代码则下面所示:

public class MainActivity extends Activity {

 TextView tvSdTotalSize = null;

 TextView tvSdAvailSeze = null;

 @Override

 protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  //渲染界面

  setContentView(R.layout.activity_main);

  //寻找控件

   tvSdTotalSize = (TextView) this.findViewById(R.id.tvSdTotalSize);

   tvSdAvailSeze = (TextView) this.findViewById(R.id.tvSdAvailSize);

   

  //获得SD卡容量和剩余量

   final StatFs stat = new                            StatFs(Environment.getExternalStorageDirectory().getPath());

         final long blockSize = stat.getBlockSize();

         final long totalBlocks = stat.getBlockCount();

         final long availableBlocks = stat.getAvailableBlocks();

         long mTotalSize = totalBlocks * blockSize;

         long mAvailSize = availableBlocks * blockSize;

         

         String mAvailSize2String = Formatter.formatFileSize(getApplicationContext(), mAvailSize);

         String mTotalSize2String = Formatter.formatFileSize(getApplicationContext(), mTotalSize);

         

   //显示

         tvSdTotalSize.setText(mTotalSize2String);

         tvSdAvailSeze.setText(mAvailSize2String);

 }

}

安卓应用开发实战:[12]保存文件到SD卡

4、StatFs类用于获得存储设备的文件系统的空间信息,new对象时候要求传入设备路径信息,所以用了Environment.getExternalStorageDirectory().getPath()方法获得SD卡的路径Environment用于获得手机环境信息。要获得其他存储设备的空间信息,修改这一句就可以了。

安卓应用开发实战:[12]保存文件到SD卡

5、blockSize:块大小,totalBlocks:总共要多少块,availableBlocks:剩余多少块。以存储块来获得内存信息,stat.getBlockSize()方法获得块大小,stat.getBlockCount()和stat.getAvailableBlocks()的返回值则是以块为单位的,所以要乘以块大小才得到以字节为单位的内存大小。

安卓应用开发实战:[12]保存文件到SD卡

6、Formatter.formatFileSize()这个方法可以把以字节为单位的long型值自动转换单位,并用字符串表示,比如Formatter.formatFileSize(getApplicationContext(), mAvailSize),当 mAvailSize=100*1024*1024,则,返回的字符串为“100MB”。

安卓应用开发实战:[12]保存文件到SD卡

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢