资讯专栏INFORMATION COLUMN

外部存储 使用详解

Dionysus_go / 1938人阅读

摘要:使用外部存储需要获取外部存储的访问权限。同时期待您的关注,感谢您的阅读,谢谢

极力推荐文章:欢迎收藏
Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

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

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

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

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

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

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

实现效果

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

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

    }

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

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

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

    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();
    }
读取显示图片的方法

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

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

布局如下:




    

    

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75893.html

相关文章

  • 详解Android数据存储技术

    摘要:对数据的存储有着良好的技术支持,是一个好的开发平台的体现,如果不能长时间保持数据,那么必然会被时代发展所淘汰。文件的导出好了,接下来分析数据存储方式了。然后再接着讲存储和数据库存储。 前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的。我们聊QQ,聊微信,看新闻,刷朋友圈等都是看里面的数据...

    habren 评论0 收藏0
  • Android之Handler消息传递机制详解

    摘要:异步消息传递所涉及的相关概念主线程线程,程序启动时自动创建。消息接受处理的对象,存储需要操作的消息。至此,关于的异步消息传递机制的解析就完成了。 前言 在Android开发中,多线程应用是非常频繁的,其中Handler机制随处可见. 下面就本人对Handle的一些理解与大家一起分享,共同回顾下Handle异步消息传递机制。 1.Handler是什么? Handler是一套在 An...

    explorer_ddf 评论0 收藏0
  • 详解Redis SORT命令

    摘要:对于返回的元素个数也是可以进行限制的,只需要使用描述符。例如以下命令先对排序,然后再分别取出的值。使用描述符,可以将结果存储在指定上,如果已经存在,则覆盖。而不将排序结果返回给客户端。参考资料官网命令介绍 本专栏与Redis相关的文章 Redis Sentinel机制与用法(一)Redis Sentinel机制与用法(二)Jedis的JedisSentinelPool源代码分析Jedi...

    KnewOne 评论0 收藏0
  • 鹅厂专家详解Android N适配要点 | 腾讯优测干货分享

    摘要:无论是应用部分还是全部打盹限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业同步。此项优化会影响所有应用,而不仅仅是面向的应用。已弃用权限现已弃用。 1.Doze模式更加强大该模式是在Android6.0中引入的,当用户设备未插电源、处于静止状态屏幕关闭时,该模式会推迟CPU和网络活动,从而增加电池寿命。在Android_N中对这种...

    luffyZh 评论0 收藏0
  • 操作系统NO.2 | 详解操作系统的非连续内存管理(清华大学 操作系统原理)

    摘要:应用程序在内存中运行有利于操作系统的有效管理,让操作系统不要考虑太多底层的原理,只需要访问一个连续地址空间,即逻辑地址空间。物理内存的控制和管理是由硬件来完成的。  创作不易,来了的客官点点关注,收藏,订阅一键三连❤?    系列文章目录 操作系统NO.1 | 了解操作系统的基础知识 概述...

    tain335 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<