ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第三章 SD卡的存储与相关信息获取 2.1

2021-09-07 14:03:15  阅读:152  来源: 互联网

标签:第三章 Button TAG File import 2.1 android SD


1. java主函数代码

  1 package com.example.qq_login_demo;
  2 
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.os.Environment;
  6 import android.text.format.Formatter;
  7 import android.util.Log;
  8 import android.view.View;
  9 import android.widget.Button;
 10 
 11 import androidx.annotation.Nullable;
 12 
 13 import java.io.File;
 14 import java.io.FileOutputStream;
 15 
 16 public class SDCardDemoActivity extends Activity implements View.OnClickListener {
 17 
 18     private Button mWriteDataBtn;
 19     private static final String TAG = "SDCardDemoActivity";
 20     private Button mCheckSdCardBtn;
 21     private Button mGetRemainingSize;
 22 
 23     @Override
 24     protected void onCreate(@Nullable Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         // 设置布局
 27         setContentView(R.layout.activity_sd);
 28         initView();
 29         initListener();
 30     }
 31 
 32     private void initListener() {
 33         // 这里原本的方法是写在onCreate方法中(即上一个方法),通过右键 + Refactor + Extract Method 可以将实现
 34         // 同类型的方法抽取出来,形成一个新的方法,有利于代码的封装
 35         mWriteDataBtn.setOnClickListener(this);
 36         mCheckSdCardBtn.setOnClickListener(this);
 37         mGetRemainingSize.setOnClickListener(this);
 38     }
 39 
 40     private void initView() {
 41         // 创建方法同initListener()
 42         mWriteDataBtn = (Button) this.findViewById(R.id.write_data_2_sd_card_btn);
 43         mCheckSdCardBtn = (Button) this.findViewById(R.id.sd_card_check);
 44         mGetRemainingSize = (Button) this.findViewById(R.id.get_sd_card_remaining_size);
 45     }
 46 
 47     @Override
 48     public void onClick(View v) {
 49         if (v == mWriteDataBtn) {
 50             // 数据写道SD卡上
 51             // 注意模拟器的的SD卡存储路径,和以前的不同
 52             File filePath = new File("/storage/emulated/0");
 53 
 54             // 然而在实际环境中,各个设备,厂商的SD卡路径往往不相同,此时需要获取SD卡的存储路径
 55             // 谷歌因此定义了一个api,以获取SD卡的存储路径
 56             // 输出的结果为: Ext-FilePath == /storage/emulated/0
 57             File externalStorageDirectory = Environment.getExternalStorageDirectory();
 58             Log.d(TAG, "Ext-FilePath == " + externalStorageDirectory.toString());
 59 
 60             File file = new File(filePath, "info.txt");
 61             FileOutputStream fout = null;
 62             try {
 63                 // 以特定的格式来存储账号密码
 64                 // 格式: username: password
 65                 fout = new FileOutputStream(file);
 66                 fout.write(("1502309758" + ": " + "cjy320723").getBytes());
 67                 fout.close();
 68             } catch (Exception e) {
 69                 e.printStackTrace();
 70             }
 71 
 72         }
 73 
 74         else if (v == mCheckSdCardBtn){
 75             // 此外,对于手机是否有SD卡,也需要获取
 76             // 点击的是检查是否有SD卡按钮
 77             // 通过查看方法说明,看出该字符串有八种状态
 78             String externalStorageState = Environment.getExternalStorageState();
 79             if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
 80                 Log.d(TAG, "SD卡已经挂载,也就是可用的");
 81             }
 82             else if (externalStorageState.equals(Environment.MEDIA_UNMOUNTED)){
 83                 Log.d(TAG, "SD卡已经退出挂载了");
 84             }
 85             // 对于低版本的Android,要想手机支持,需要在Gradle Scripts的build.gradle中将minSdkVersion属性调低
 86 
 87 
 88         }
 89 
 90         else if (v == mGetRemainingSize){
 91             File externalStorageDirectory = Environment.getExternalStorageDirectory();
 92             long freeSpace = externalStorageDirectory.getFreeSpace();
 93             long usableSpace = externalStorageDirectory.getUsableSpace();
 94             // 把long类型转换成直观的空间大小
 95             String freeSize = Formatter.formatFileSize(this, freeSpace);
 96             String usableSize = Formatter.formatFileSize(this,usableSpace);
 97             Log.d(TAG, "remaining = " + freeSize);
 98             Log.d(TAG, "usabelSize = " + usableSize);
 99             // 对于freeSpace和UsableSpace的区别:(详情可查看官方说明)
100             // freeSpace: 返回此抽象路径名命名的分区中未分配的字节数。
101             // 返回的未分配字节数是一个提示,但不能保证可以使用其中的大部分或任何字节。
102             // UsableSpace: 返回此抽象路径名命名的分区上此虚拟机可用的字节数。
103             // 如果可能,此方法将检查写入权限和其他操作系统限制,因此通常会比getFreeSpace更准确地估计实际可以写入多少新数据。
104         }
105     }
106 }

 

2. layout定义

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     >
 8 
 9     <Button
10         android:id="@+id/write_data_2_sd_card_btn"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:text="往SD卡写数据"/>
14 
15     <Button
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:text="检查是否支持SD卡"
19         android:id="@+id/sd_card_check" />
20 
21     <Button
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:text="获取SD卡可用空间"
25         android:id="@+id/get_sd_card_remaining_size" />
26 
27 </LinearLayout>

 

标签:第三章,Button,TAG,File,import,2.1,android,SD
来源: https://www.cnblogs.com/EndlessShw/p/15237907.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有