Android中保存图片到本地功能实现

2023-11-06

本文描述将一个Bitmap对象保存为一个图片文件的主要步骤。保存的图片文件能够立刻在系统相册和图库中找到。


主要步骤

这里只介绍按下“保存”后如何将一个Bitmap对象保存为图片文件的执行步骤,对图片的下载,图片到Bitmap对象的转换,Bitmap对象的格式转换和压缩,以及界面设计部分全部都忽略了。

  1. 确定存储路径
  2. 获取外部存储权限
  3. 确定外部存储状态
  4. 确定文件名
  5. 保存到文件中
  6. 发送广播,通知系统扫描保存后的文件
定存储路径

      在Android中文件存储路径包括内部存储和外部存储两种类型。 


      对内部存储,当一个app被安装到手机后,Android系统会在内部存储的/data/data/目录下创建一个以包名称命名的文件夹。例如/data/data/com.sohu.inputmethod.sogou/。一个应用对内部存储的所有访问都被限制在这个文件夹中,也就是说Android应用只能在该目录中读取,创建,修改文件。对该目录之外的其他内部存储中的目录都没有任何操作的权限。因此,如果将图片保存在内部存储中,只能被应用自身读取,其他应用均无法读取。如果需要让系统图库,相册或其他应用能够找到保存的图片,必须将图片保存到外部存储中。


      对外部存储,当一个app被安装到手机后,Android系统会在外部存储的/Android/data/目录下创建一个以包名命名的文件夹(这里第一个/不是根路径,而是相对外部存储所挂载路径的相对路径)。例如/storage/emulated/0/Android/data/com.sohu.inputmethod/。这个路径同样只能被应用自身读取,其他应用不能访问。因此,也不能将图片保存在这个目录中。


       除外部存储的/Android目录之外的其他目录一般都是可以被其他应用访问的。目前,大多数应用都会在外部存储的根路径下建立一个类似包名的多层目录,以存储需要共享的文件。例如/storage/emulated/0/sogou/image/。还需要注意的是,很多查看图片的应用都支持按照文件夹来查看图片。如果将图片所在的文件夹取名为image,photo之类的,就无法和其他文件夹区分开,用户也不能识别该文件夹的用途。因此最好取一个有区分度的文件夹名字,例如百度贴吧就保存在/tieba目录,微信是保存在/tencent/MicroMsg/WeiXin目录。


       由于Android系统的碎片化问题,不同设备上外部存储的路径很可能会不同,因此,不能直接使用/storage/emulated/0/作为外部存储的根路径。
Android SDK中 Environment类 提供了getExternalStorageDirectory()方法来获取外部存储的根路径。示例如下:

[java]  view plain   copy
  1. String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tencent/MicroMsg/WeiXin/"  

需要注意的是Environment.getExternalStorageDirectory()返回的路径中最后一个字符不是/,如果需要创建子目录,需要在子目录的前后都加上/。


获取外部存储权限

由于需要在外部存储中写文件,需要在AndroidManifest.xml中增加如下的权限声明。

[java] 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中保存图片到本地功能实现 的相关文章

  • msvcp100.dll丢失怎么修复,这三个常用的修复方法可以解决

    msvcp100 dll是一个动态链接库文件 它是Microsoft Visual C Redistributable软件包的一部分 这个文件的作用是提供在运行C 程序时所需的函数和功能 msvcp100 dll是一个非常重要的文件 它为我
  • sed替换、提取内容案例

    sed替换 这个命令可以看到替换后的内容 如果希望替换后的内容直接覆盖原文件 加上 i参数即可 备注 mac与linux替换原文件略有区别 mac强制要求对原文件进行备份 more tmp txt abcdef hbhberfdhsf se
  • tshydro工具

    一 工具介绍 https github com cavios tshydro tshydro R package that estimates water level time series from satellite altimetry
  • C++里面的继承

    C 里面的继承 1 什么是继承以及怎样继承 1 1 定义 1 2 继承格式与方式 2 基类对象与派生类对象之间的赋值转换 公有继承 3 作用域的理解 4 派生类的默认成员函数 5 继承与友元 继承与静态成员 6 菱形继承和菱形虚拟继承 7
  • BP神经网络原理及在Matlab中的应用

    一 人工神经网络 关于对神经网络的介绍和应用 请看如下文章 神经网络潜讲 如何简单形象又有趣地讲解神经网络是什么 二 人工神经网络分类 按照连接方式 前向神经网络 反馈 递归 神经网络 按照学习方式 有导师学习神经网络 无导师学习神经网络
  • 毕业设计 - 基于单片机红外成像仪

    文章目录 1 简介 2 项目简介 3 主要器件 3 1 MLX90640红外摄像头模块 3 1 1 模块特性 3 1 2相关参数 3 1 2 应用场景 3 1 3 接口说明 以接入 MCU 为例 4 实现效果 4 1 STM32 LCD 图
  • java----锁的升级与对比 偏向锁-》轻量级锁-》重量级锁

    目录 偏向锁 偏向锁的撤销 轻量级锁 轻量级锁加锁 轻量级锁解锁 重量级锁 锁的优缺点比较 Java SE 1 6为了减少获得锁和释放锁带来的性能消耗 引入了 偏向锁 和 轻量级锁 一共有4种状态 从低到高依次是 无锁状态 偏向锁状态 轻量
  • javafx程序关闭所有窗口后,进程仍然存在

    问题 由于某些原因 即使关闭应用程序窗口并退出后 我的应用程序中的某些过程仍会继续 解决方案 使用System exit 0 窗口关闭后 可以杀死进程
  • 手写react-redux核心原理,再也不怕面试官问我react-redux原理

    当一个react项目组件层级越来越深 页面越来越多的时候 数据在各个组件层级和页面之间传递的需求就会比较多 很多变量也需要做成可全局管理的 在这个时候 redux和react redux的使用就很有必要了 它们能帮助我们很方便的进行项目全局
  • 快速安装playwright python

    快速安装playwright python首先 注意本机的python版本必须大于3 7 下面是安装步骤的提速方法 第一步 pip install playwright i https mirrors aliyun com pypi sim
  • 音频模块知识总结

    1 GBK12 16 24是指什么 GBK12 GBK16 GBK24是指不同的字体点阵大小 也就是字体的显示大小 在GBK编码中 一个汉字通常是由多个点阵组成的 其中点阵的大小就是字体的点阵大小 具体来说 GBK12 指每个汉字由12 1
  • JDBC步骤(以查询为例)

    JDBC 全称为java database connectivity 也就是Java数据库连接 这是一个Java连接SQL数据库的标准 包含了常用的API 让我们能方便的连接和管理SQL数据库 每个数据库厂商都会提供相应的JDBC驱动程序
  • js取backgroundPositionX的值

    如果有内联样式通过elem style backgroundPosition可以取得backgroundPositionX和backgroundPositionY两个值 但是如果没有内联样式通过计算样式getComputedStyle el
  • 网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解

    网络原理 以及对VMware Workstation虚拟网络VMnet0 VMnet1 VMnet8的图解 借鉴了 http hi baidu com whitelocus blog item d091ded88ac669e038012f5
  • Spring 启动过程,bean到底是什么时候通过反射生成实例的

    Spring 启动时最重要的方法refresh 1 在obtainFreshBeanFactory 中创建所有对象的BeanDefinition 2 在finishBeanFactoryInitialization beanFactory
  • 堆(什么是堆以及怎样自己创建堆)

    我们不必非常聪明才能改变世界 我们只需要比绝大多数人更早地认识到问题 并付诸行动 毛里茨 萨克斯 作者 不能再留遗憾了 关于作者 博主正在学习C和Java 目前有些关于leetcode刷题的专栏leetcode刷题 该专栏主要是关于数据结构
  • 深度学习apex包安装失败的问题

    文章目录 一 前言 二 正确的安装方法 2 1 从github上下载 2 2 切换到下载后的路径 2 3 进行安装 一 前言 在进行论文复现的时候 发现缺了一个重要的包 apex包 这是NVIDIA开发的基于PyTorch的混合精度训练加速
  • 【Java】RestTemplate下载远程文件到本地

    一 什么是RestTemplate RestTemplate 是 Spring 框架提供的一个用于访问 REST 服务的组件 底层对 HTTP 请求及响应进行了封装 提供了很多访问远程REST服务的方法 可简化代码开发 二 实例化RestT
  • 在同一台机器上部署多个tomcat

    文章引用地址 https www cnblogs com wryu p 7327298 html 安装tomcat步骤 1 下载apache tomcat 8 0 30 下载下来的文件为apache tomcat 8 0 30 window
  • React Native —— webstorm搭建React Native开发环境

    1 下载安装node js 安装之前检查是否已有node js环境 cmd 命令下输入node v 出现版本号 说明已经成功安装了node js环境 如下图所示 2 安装 react native 脚手架工具 如果之前全局安装过旧的reac

随机推荐

  • Windows Keras load_model报错及解决

    1 报错 ValueError Unknown metric function psnr superResModel load model config SUPER RES MODEL 解决 设置custom objects superRe
  • 学生派生类

    学生派生类 10 分 根据所给的类Student定义其派生类 并利用构造函数进行数据初始化 使程序能按照 样例 的格式进行输出 类定义 include
  • 机器学习_周志华_问题汇总_第2周

    问题 Q1 如果我想分析一下文本分类错误的原因 应该从哪些方面入手 可以去分析一下哪个类别错误率高 然后看看这个类别的是否不平衡 针对这个类别看看能不能进行改进 还有就是数据量过少 或是数据质量较差 比如人为标注的样本可能类别是不正确的 都
  • 构建时 flatten-maven-plugin报错问题

    ERROR Failed to execute goal org codehaus mojo flatten maven plugin 1 2 4 flatten flatten on project 构建项目时发生以上错误 最后成功解决
  • 来,创建一个高效的IMEI编码生成器

    0x1 起因 话说 今天下午群里面有个同学求助一段代码 他想问的是 这个 tempimei j 2 0x30 是啥子意思 0x2 其实这是很常见的一种写法 我们留意到 tempimei 这个变量其实是一个字符串 在 NET中 对一个字符串取
  • Yolo 推测的候选框NMS笔记

    YOLOV3 NMS笔记 1 参数 假设当前网络输入大小为416 416 分类为3个 a b c 每个YOLO层3个anchor 输入图像 img 1 3 416 416 代表这个批次内一张图片 通道为3 经过降采样最大的YOLO层后 yo
  • TortoiseGit更换用户名和密码

    选择 TortoisGit 然后选择 设置 选择 已保存数据 然后 清除 认证数据 清除后 重新 pull 拉取 数据 会让重新输入用户名和密码
  • 微信小程序授权登录,跳转页面后在跳回首页不用再次登录

    小程序授权登录要使用wx getUserProfile 获得用户投头像后 做一些页面跳转功能 但是如果需要再次跳转首页的话 小程序就会有回到登录前的状态 这样体验感会很差 要想不用再次登录 也不难 只需要判断userInfo是否还存有信息就
  • 三种方式部署单机版Minio,10行命令干就完了~

    必要步骤 安装MinIO 拉取MinIO镜像 docker pull quay io minio minio 创建文件挂载点 mkdir home docker MinIO data 文件挂载点映射 默认是 mydata minio dat
  • JS中splice的详细用法介绍

    splice 是一个用于修改数组的方法 它可以实现添加 删除或替换数组中的元素 下面是 splice 方法的中文解释 splice 方法的语法如下 array splice start deleteCount item1 item2 参数说
  • 推荐系统学习总结

    前段时间参加了泰迪杯数据挖掘挑战赛 选的是B题电视产品营销推荐 由于涉及到推荐系统这一块比较大的知识领域 之前没有学过 于是在比赛之初找了一些网上的资料自学了几天 有了一些初步的了解与认识 因实训的项目中推荐系统仍是很重要的一部分 故重新再
  • win7下linux 双系统安装教程,【系统安装】双系统——Win7下安装linux系统详细步骤...

    preface html 1 在Win7下安装linux系统以前 若是以前安装过linux系统 可能会遇到须要从新安装的问题 linux 由于linux系统是安装在win7系统下的一个系统盘分区中 若是须要卸载linux直接把分区删除就能够
  • VLC使用教程(一):使用VLC录制屏幕

    1 打开VLC 选择媒体 gt 打开捕获设备 2 选择捕获设备 捕获模式选择桌面 捕获期望的帧率以及更多选项中的缓冲根据需求设置 3 点击播放按钮右侧的下拉三角 选择转换 4 点击目标文件右侧的浏览 选择文件放置路径 填写MP4文件的名字
  • nova6se可以升级鸿蒙吗,EMUI11支持哪些机型 华为EMUI11适配支持机型汇总

    华为最新的EMUI11公布了 不少的用户都想试试华为最新的这个EMUI11系统 下面就来为大家分享一下华为EMUI11适配支持机型汇总 1 首批支持EMUI11 更新的机型有 P40 系列 Mate30 系列 MatePad Pro系列等
  • 打印U盘文件计算机有记录吗,技术员教你win10系统查看打印机打印历史记录的问题...

    技术员教你win10系统查看打印机打印历史记录的问题 很多朋友安装win10系统后 在使用的过程中会遇到对win10系统查看打印机打印历史记录进行设置的情况 可能有很多用户还是不能自己对win10系统查看打印机打印历史记录进行设置吧 其实简
  • 添加购物车接口

    添加购物车接口 1 判断商品是否存在 是否上架 库存足够 2 判断商品之前是否已经在购物车里 3 返回的是当前用户的所有购物车物品信息 注意 测试 controller层 获取当前用户id下的购物车信息 1 判断商品是否存在 是否上架 库存
  • 华为OD机试真题- 字符串统计-2023年OD统一考试(B卷)

    题目描述 给定两个字符集合 一个为全量字符集 一个为已占用字符集 已占用的字符集中的字符不能再使用 要求输出剩余可用字符集 输入描述 1 输入为一个字符串 一定包含 符号 前的为全量字符集 后的字为已占用字符集 2 已占用字符集中的字符一定
  • MFC——获取当前字体的高度、宽度等信息

    当我们想往屏幕上面写多行内容时 我们需要之前当前文本的宽度和高度信息 我们可以采用以下方法 void CDialogView OnDraw CDC pDC CDialogDoc pDoc GetDocument ASSERT VALID p
  • JAVA String 常用方法(超详细)

    文章目录 一 常见String类的获取功能 1 length 获取字符串长度 2 charAt int index 获取指定索引位置的字符 3 indexOf int ch 返回指定字符在此字符串中第一次出现处的索引 数字是ASCII码中对
  • Android中保存图片到本地功能实现

    本文描述将一个Bitmap对象保存为一个图片文件的主要步骤 保存的图片文件能够立刻在系统相册和图库中找到 主要步骤 这里只介绍按下 保存 后如何将一个Bitmap对象保存为图片文件的执行步骤 对图片的下载 图片到Bitmap对象的转换 Bi