Android 外部存储使用详解

来源:互联网 发布:php mysql 参数化 编辑:程序博客网 时间:2024/05/29 18:05

Android 设备支持外部存储,比如SD卡等,保存在外部存储的数据具有全局可读性,可供在其他设备比如电脑上阅读,修改等。注意:使用外部存储需要获取外部存储的访问权限。

欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid
微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

通过本文章你将学习到如下知识点:

1. 保存外部存储需要申请权限2. 外部存储使用Demo(保存,读取,删除图片)

1. 保存外部存储需要申请权限

这个很重要,不然无法操作SD 卡,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 外部存储使用Demo(保存,读取,删除图片)

  • 判断是否挂载SD 卡方法
    /**     * 1.判断SD卡是否挂载     * **/    public static boolean isMounted() {        String state = Environment.getExternalStorageState();        return state.equals(Environment.MEDIA_MOUNTED);    }
  • 实现效果
外部存储保存图片的方法
外部存储保存图片的方法
  • SD 保存图片,删除图片、显示图片的方法
public class FileExternalStorageMethods extends Activity {    // 定义文件存储路径 getExternalStorageDirectory    public static final String store_path = Environment            .getExternalStorageDirectory()            + File.separator            + "filename"            + File.separator + "images" + File.separator;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_externel_storage);    }    public void BtnSaveImage(View view) {        // 获取图片类型 bitmap        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),                R.drawable.ic_launcher);        ByteArrayOutputStream baos = new ByteArrayOutputStream();        // 将bitmap 压缩成byte类型 并保存到outputstream中        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);        bitmap.recycle();        boolean saveimg = SaveImg(getApplicationContext(), "photo.png",                baos.toByteArray());        if (saveimg) {            Toast.makeText(getApplicationContext(), "保存成功" + store_path,                    Toast.LENGTH_SHORT).show();        }        try {            baos.close();        } catch (IOException e) {            e.printStackTrace();        }    }    public void BtnDeleteImage(View view) {        DeletleImg(getApplicationContext(), "photo.png");    }    public void BtnReadImage(View view) {        Bitmap readImg = ReadImg(getApplicationContext(), "photo.png");        if (readImg == null) {            Toast.makeText(getApplicationContext(), "读取失败" + store_path,                    Toast.LENGTH_SHORT).show();        } else {            ((ImageView) findViewById(R.id.img_external))                    .setImageBitmap(readImg);        }    }    /**     * 1.判断SD卡是否挂载     * **/    public static boolean isMounted() {        String state = Environment.getExternalStorageState();        return state.equals(Environment.MEDIA_MOUNTED);    }    // 保存图片的方法    public static boolean SaveImg(Context context, String filename, byte[] data) {        // 判断是否挂载SD卡        if (!isMounted()) {            Toast.makeText(context, "SD卡未安装", Toast.LENGTH_SHORT).show();            return false;        }        File dir = new File(store_path);        // 创建文件目录        if (!dir.exists()) {            dir.mkdirs();        }        try {            // 向文件目录 dir中写文件filename            FileOutputStream fos = new FileOutputStream(new File(dir, filename));            fos.write(data);            fos.close();            return true;        } catch (IOException e) {            e.printStackTrace();            Log.i("TAG", "IOException..." + e);            return false;        }    }    // 读取图片    public static Bitmap ReadImg(Context context, String filename) {        // 判断是否挂载SD卡        if (!isMounted()) {            Toast.makeText(context, "SD卡未安装", Toast.LENGTH_SHORT).show();            return null;        }        // 获取文件路径下的文件名称        File imgFile = new File(store_path, filename);        if (imgFile.exists()) {            Log.i("TAG", "imgFile" + imgFile.getAbsolutePath());            // 将路径下的文件转换成 bitmap            return BitmapFactory.decodeFile(imgFile.getAbsolutePath());        } else {            Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();        }        return null;    }    // 删除图片    public static void DeletleImg(Context context, String filename) {        File dirfile = new File(store_path + filename);        // 判断文件是否存在        if (!dirfile.exists()) {            Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();            return;        }        if (dirfile.isDirectory()) {            String[] childdir = dirfile.list();            for (int i = 0; i < childdir.length; i++) {                new File(dirfile, childdir[i]).delete();            }        }        dirfile.delete();    }}
  • 布局如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ImageView        android:id="@+id/img_external"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/btn_external_save"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="BtnSaveImage"        android:text="保存图片到SD卡" />    <Button        android:id="@+id/btn_external_delete"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="BtnDeleteImage"        android:text="删除SD卡 图片" />        <Button        android:id="@+id/btn_external_read"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="BtnReadImage"        android:text="显示SD卡 图片" /></LinearLayout>

至此保存外部存储的例子完成。

​欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid
微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。


点击阅读原文,获取更多福利




原创粉丝点击