0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SD卡外部存储使用方法

jf_78858299 来源:程序员Android 作者:程序员Android 2023-05-26 11:32 次阅读

一、保存外部存储需要申请权限

二、外部存储使用案例(保存,读取,删除图片)

一、 保存外部存储需要申请权限

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

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

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

二、外部存储使用案例(保存,读取,删除图片)

1. 实现效果

图片

外部存储保存图片的方法

2. 判断是否挂载 SD 卡方法

/**
     * 1.判断SD卡是否挂载
     * **/
    public static boolean isMounted() {

        String state = Environment.getExternalStorageState();
        return state.equals(Environment.MEDIA_MOUNTED);

    }

SD 保存图片,删除图片、显示图片的方法

3. 保存图片到SD卡

保存图片到SD卡 实现代码如下:

// 保存图片的方法
    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 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;
        }
    }

4. 删除图片的方法

删除图片 代码实现代码实现如下:

public void BtnDeleteImage(View view) {
        DeletleImg(getApplicationContext(), "photo.png");

    }

    // 删除图片
    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();
    }

5.读取显示图片的方法

读取显示图片代码实现如下:

// 读取图片
    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);
        }

    }

    // 读取图片
    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;
    }

6. 布局如下:

<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卡 图片" />

<span class="hljs-name"LinearLayout>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3923

    浏览量

    127116
  • 数据
    +关注

    关注

    8

    文章

    6874

    浏览量

    88801
  • SD卡
    +关注

    关注

    2

    文章

    559

    浏览量

    63789
收藏 人收藏

    评论

    相关推荐

    STM32CubeMx之SD驱动

    SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备。SD
    的头像 发表于 05-31 09:21 7085次阅读
    STM32CubeMx之<b class='flag-5'>SD</b><b class='flag-5'>卡</b>驱动

    SDHC高容量SD存储卡

    SDHC是“High Capacity SD Memory Card”的缩写,即“高容量SD存储卡”,在其中规定SDHC是符合新的规范、且容量大于2GB小于等于32GB的SD
    发表于 02-17 11:59 1585次阅读

    DSC的SD存储卡接口设计解析

    引 言 SD存储卡(Secure Digital Memory Card)由SD联盟(松下、东芝及美国SanDisk公司)于1999年8月共同开发研制,是一种基于半导体快闪存储器的新一
    发表于 11-03 10:18 4次下载
    DSC的<b class='flag-5'>SD</b><b class='flag-5'>存储卡</b>接口设计解析

    全新SD Express存储卡推出 速度赶超SSD

    SD组织的展台上, 小编发现了全新的SD Express存储卡SD协会称这是全新的基于第七代SD标准制造的
    发表于 07-02 09:25 1886次阅读

    天嵌科技:闪存SD存储卡16G-存储卡

    天嵌科技:闪存SD存储卡16G-存储卡
    的头像 发表于 10-16 15:47 1895次阅读
    天嵌科技:闪存<b class='flag-5'>SD</b><b class='flag-5'>存储卡</b>16G-<b class='flag-5'>存储卡</b>

    微雪电子Micro SD 存储模块简介

    Micro SD存储模块 支持插入TI 支持SDIO及SPI接口 接口规格为PIN间距2.54mm排针 型号 Micro SD St
    的头像 发表于 11-12 16:41 2892次阅读
    微雪电子Micro <b class='flag-5'>SD</b><b class='flag-5'>卡</b> <b class='flag-5'>存储</b>模块简介

    微雪电子SD存储模块简介

    TF扩展模块 SD存储模块 支持SDIO及SPI接口 支持Micro SD Card及SD
    的头像 发表于 12-30 09:30 1684次阅读
    微雪电子<b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>存储</b>模块简介

    SD读写测试程序

    电子仪器理想的外部存储介质。SD 支持两种总线方式:SD 方式与 SPI 方式。其中 SD
    发表于 12-31 19:22 17次下载
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>读写测试程序

    STM32G0开发笔记:SD模块的使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SD模块的使用方法
    的头像 发表于 01-19 16:27 2233次阅读
    STM32G0开发笔记:<b class='flag-5'>SD</b><b class='flag-5'>卡</b>模块的<b class='flag-5'>使用方法</b>

    SD(HC)-存储卡和MMC接口调理-AN10911

    SD(HC)-存储卡和MMC接口调理-AN10911
    发表于 02-16 20:50 0次下载
    <b class='flag-5'>SD</b>(HC)-<b class='flag-5'>存储卡</b>和MMC接口调理-AN10911

    S7-1500存储卡使用方法

    SD的读写,类似于普通SD,但是不能用windows格式化
    的头像 发表于 04-20 09:48 7586次阅读

    存储卡——SD/micro SD的图标了解SD

    D有不少规范,常用包含存储空间和存储速度两种,厂商会把满足的规范的图标印在卡面上,所以通过上有的规格,就能很快判断出这张的容量、类型和
    的头像 发表于 07-18 00:00 5804次阅读
    从<b class='flag-5'>存储卡</b>——<b class='flag-5'>SD</b>/micro <b class='flag-5'>SD</b>的图标了解<b class='flag-5'>SD</b><b class='flag-5'>卡</b>

    SD/micro SD存储卡介绍

    SD有不少规范,常用包含存储空间和存储速度两种,厂商会把满足的规范的图标印在卡面上,所以通过上有的规格,就能很快判断出这张
    的头像 发表于 07-18 10:39 1766次阅读

    SD与Flash存储究竟存在哪些差异?

    SD 是基于闪存技术的一种可移动存储卡,由 SD 协会进行开发并标准化,在数码相机、智能手机、平板电脑等设备中广泛采用。SD
    的头像 发表于 06-05 15:54 1481次阅读
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>与Flash<b class='flag-5'>存储</b>究竟存在哪些差异?

    贴片式SD功能介绍【MK SD NAND】

    SDNAND,通常称为嵌入式SD、贴片式TFSD Flash、直接贴装SD、贴装
    的头像 发表于 07-05 17:03 690次阅读
    贴片式<b class='flag-5'>SD</b><b class='flag-5'>卡</b>功能介绍【MK <b class='flag-5'>SD</b> NAND】