zoukankan      html  css  js  c++  java
  • Android之外部存储(SD卡)

    *手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,U盘也行。所有的Android设备都有两个文件存储区域:“内部”和“外部”存储器。这两个名称来自早期的Android,当时大多数设备都提供内置的固定的内存(内置存储器)即ROM中的内部存储,外加一个可移动的存储介质,如micro SD卡(外部存储器)。但也有些设备把固定不变的存储空间分成“内部”和“外部”两部分,这样即使没有可移动的存储介质,也总会有两个存储空间,并且不管外部存储器是可移动的,还是固定的,API的行为是相同的。

    * 路径: /mnt/sdcard/

    *Environment类

    getExternalStorageDirectory(); // 获取sd卡的路径

    getExternalStorageState(); // 获取sd卡的状态

    Environment.MEDIA_MOUNTED // 挂载状态

    Environment.MEDIA_UNMOUNTED // 卸载状态


    * 需要添加读写SD卡的权限
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    // 检查SD卡是不插入和拔出
       public boolean isSdMounted(View view) {
          String staus = Environment.getExternalStorageState();
          if (Environment.MEDIA_MOUNTED.equals(staus)) {
             System.out.println("插入了SD卡");
             return true;
          } else if (Environment.MEDIA_UNMOUNTED.equals(staus)) {
             System.out.println("SD卡被拔出了");
             return false;
          }
          return false;
       }
    
       // 获取SD卡的路径
       public String getSdPath(View v) {
          File file = Environment.getExternalStorageDirectory();
          String path = file.getAbsolutePath();
          return path;
       }
    
       // 获取SD卡可用空间
       @SuppressLint("NewApi")
       public long getSdFreeSpace(View v) {
          File file = Environment.getExternalStorageDirectory();
          return file.getFreeSpace();
         // 格式化大小    
       }
    
    package com.example.qq;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.text.TextUtils;
    import android.view.Menu;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	private EditText	etPwd;
    	private EditText	etQQ;
    	private CheckBox	cbRemPwd;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		etPwd = (EditText) findViewById(R.id.et_pwd);
    		etQQ = (EditText) findViewById(R.id.et_qq);
    		cbRemPwd = (CheckBox) findViewById(R.id.cb_rem_pwd);
    		
    		readData();
    	}
    
    	/**
    	 * 从文件中读取数据显示在界面上
    	 */
    	private void readData() {
    		File file = new File("/mnt/sdcard/waibu.txt");
    		try {
    			FileInputStream fis = new FileInputStream(file);
    			BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    			String text = br.readLine();
    			String[] content = text.split("==");
    			String qq = content[0];
    			String pwd = content[1];
    			//把QQ号码和密码显示在文本输入框
    			etQQ.setText(qq);
    			etPwd.setText(pwd);
    			br.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    
    	/**
    	 * 1. 获取用户输入的QQ号码和密码
    	 * 2. 做非空判断
    	 * 3. 如果用户勾选了复选框,用文件存储密码
    	 */
    	public void gelogin(View v){
    //		System.out.println("点击了按钮");
    		String pwd = etPwd.getText().toString().trim();
    		String qq = etQQ.getText().toString().trim();
    		if(TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)){
    			Toast.makeText(this, "亲,请输入QQ号码或者密码哦  :) ", 0).show();
    			
    			return;
    		}
    		//判断用户是否勾选复选框
    		boolean checked = cbRemPwd.isChecked();
    		if (checked) {
    			//用文件存储密码
    			try {
    				File file = new File("/mnt/sdcard/waibu.txt");
    				FileOutputStream fos = new FileOutputStream(file);
    				String text = qq+"=="+pwd;
    				fos.write(text.getBytes());
    				//释放资源
    				fos.close();
    				Toast.makeText(this, "密码存储成功,/mnt/sdcard/waibu.txt", 0).show();
    			} catch (Exception e) {
    				e.printStackTrace();
    				Toast.makeText(this, "存储失败了  :( ", 0).show();
    			}
    		}
    		
    	}
    	
    }
    

  • 相关阅读:
    actionbar
    记:使用Xenocode加壳混淆后,无法“自杀覆盖”的自动更新
    用c# 实现设计器 DesignSurface
    将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
    【转】给自己的软件制作注册码
    免费的Web Service网址
    MS SQL 2005/8 无法远程连接的解决方案【留】
    IIS 部署 ASP.NET 的一个注意点
    成语验证
    C#利用msscript.ocx控件执行JS脚本
  • 原文地址:https://www.cnblogs.com/loaderman/p/6430785.html
Copyright © 2011-2022 走看看