因 Android1 1谷歌禁止使用requestLegacyExternalStorage ,故将存储方式分为两种方式来进行文件存储。

存储你的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。在这里咱们将图片保存至图库(共享文件)。

需要存储权限

    private void saveBitmap() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 检查该权限是否已经获取int i = ContextCompat.checkSelfPermission(FileStorageActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);// 权限是否已经 授权 GRANTED---授权  DINIED---拒绝if (i != PackageManager.PERMISSION_GRANTED) {// 如果没有授予该权限,就去提示用户请求startRequestPermission();} else {resourceBitmap();}} else {resourceBitmap();}}

保存数据

    private void resourceBitmap() {Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ceshi);boolean isSave = PictureStorageUtils.isSaveImage(this, bitmap, "sccgx");Log.e("File","isSave:"+isSave);}/*** 功能描述:将图片文件保存至本地*/
public class PictureStorageUtils {public static boolean isSaveImage(Context context, Bitmap bm, String name) {boolean isSave;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {//大于等于android 10isSave = saveImageQ(context, bm, name);} else {isSave = saveImage(context, bm, name);}return isSave;}private static boolean saveImage(Context context, Bitmap outB, String name) {String imgName = name.isEmpty()?String.valueOf(System.currentTimeMillis()):name;//File.separator就是文件路径String fileName = Environment.getExternalStorageDirectory() + File.separator + "DCIM"+ File.separator + "demo" + File.separator;try {File file = new File(fileName);if (!file.exists()) {file.mkdirs();}Log.e("File","saveAndGetImage:" + file);File filePath = new File(file + "/" + imgName + ".png");Log.e("File","filePath:" + filePath);FileOutputStream out = new FileOutputStream(filePath); //保存到本地,格式为JPEGif (outB.compress(Bitmap.CompressFormat.PNG, 100, out)) {out.flush();out.close();}Log.e("File","saveAndGetImage:END");//刷新图库if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//高于22版本要手动授权// 检查该权限是否已经获取int i = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);// 权限是否已经 授权 GRANTED---授权  DINIED---拒绝if (i != PackageManager.PERMISSION_GRANTED) {// 提示用户应该去应用设置界面手动开启权限} else {context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(filePath)));}} else {context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(filePath)));}return true;} catch (FileNotFoundException e) {Log.e("File","FileNotFoundException e.toString: " + e.toString());e.printStackTrace();return false;} catch (IOException e) {Log.e("File","IOException e.toString: " + e.toString());e.printStackTrace();return false;}}//功能描述:Android10及以上保存图片到相册@RequiresApi(api = Build.VERSION_CODES.Q)private static boolean saveImageQ(Context context, Bitmap image, String name) {long mImageTime = System.currentTimeMillis();String mImageFileName = name.isEmpty()?String.valueOf(mImageTime):name;final ContentValues values = new ContentValues();values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM+ File.separator + "demo"); //图库(DCIM)中显示的文件夹名。values.put(MediaStore.MediaColumns.DISPLAY_NAME, mImageFileName);values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");values.put(MediaStore.MediaColumns.DATE_ADDED, mImageTime / 1000);values.put(MediaStore.MediaColumns.DATE_MODIFIED, mImageTime / 1000);values.put(MediaStore.MediaColumns.DATE_EXPIRES, (mImageTime + DateUtils.DAY_IN_MILLIS) / 1000);values.put(MediaStore.MediaColumns.IS_PENDING, 1);Log.e("File",values.get(MediaStore.MediaColumns.RELATIVE_PATH).toString());ContentResolver resolver = context.getContentResolver();final Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);try {//写下我们文件的数据try (OutputStream out = resolver.openOutputStream(uri)) {if (!image.compress(Bitmap.CompressFormat.PNG, 100, out)) {throw new IOException("Failed to compress");}}//一切都很顺利values.clear();values.put(MediaStore.MediaColumns.IS_PENDING, 0);values.putNull(MediaStore.MediaColumns.DATE_EXPIRES);resolver.update(uri, values, null, null);return true;} catch (IOException e) {Log.e("File",e.getMessage());return false;}}
}

测试机:Galaxy A8s

图片保存路径:Galaxy A8s\Phone\DCIM\demo

测试机:Pixel XL API 31(AS模拟器)

图片保存路径:/storage/emulated/0/DCIM/demo/sccgx.png

Android 文件存储-图片存储相关推荐

  1. android 数据文件存储,实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍android文件存储数据方式. 1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不 ...

  2. android文件存储数组,Android面试简录——文件存储

    * SharedPreferences 请描述Android SDK支持哪些文件存储技术? 1.SharedPreferences保存key-value类型的数据 2.流文件存储(openFileOu ...

  3. android 文件存储 集合,Android 文件存储的基本使用

    在Android中我们大多数情况下我们用的都是绝对路径: 文件存储位置说明: 内部存储不是内存,内部存储位于系统中很特殊的一个位置,当应用被卸载后,内部存储的文件夹也被删除,一个应用所创建的所有文件都 ...

  4. Android文件存储方式之openFileOutput与获取数据openFileInput

    一般存储数据无非分为SP存储和数据库还有文件存储,这里我们说下文件存储openFileOutput和取出数据openFileInput 我们在一不小心退出APP如果再无退出之前不将数据保存的话数据是会 ...

  5. android 文件存储基础

    要搞清楚文件存储首先需要知道内存 和外存的定义 内存: 在任何时候都是可用的, 默认情况你存储的文件只有你自己的应用可用访问 当用户卸载app时候,系统删除所有内存中保存的文件 外存:不总是可以使用的 ...

  6. 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑

    转自:https://blog.csdn.net/u010937230/article/details/73303034 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定 ...

  7. Android文件存储---内部存储,外部存储以及各种存储路径解惑

    本文转自:https://blog.csdn.net/u010937230/article/details/73303034 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储 ...

  8. Android 文件存储

    Android 存储空间操作 一.专属存储空间 1.1.内部存储空间 1.1.1 在专属存储空间写入一个文件: String filename = "myfile"; String ...

  9. android文件存储教程,android开发基础教程—文件存储功能实现

    文件存储: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override pro ...

最新文章

  1. feignclient多个配置_@FeignClient同一个name使用多个配置类的解决方案
  2. 人性经不起金钱的考验,何况是黄金 --- 我看电影《黄金兄弟》
  3. 关于js选项卡的一些问题
  4. 用python定义一个员工类_Python:定义一个只有整数定义的类
  5. 反光衣识别算法冠军方案总结(附源码)|极市打榜
  6. 解读综合布线12大热点技术趋势
  7. vs2008打开vs2010所做的项目的方法
  8. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
  9. Python入门到精通三天速成第三讲——多重继承
  10. 自定义UINavigationController push和pop动画
  11. rfid 物流业务信息系统介绍
  12. java开发webservice接口_webservice接口的开发和调用
  13. vue 移动端弹窗后禁止页面滚动 @touchmove.prevent
  14. 关于2012(世界末日)
  15. 关于应用RestHighLevelClient操作ElasticSearch出现“远程主机强迫关闭一个现有连接”的问题探究
  16. 燕麦粉行业调研报告 - 市场现状分析与发展前景预测
  17. BGP邻居路由条目数超限
  18. win10 Edge浏览器 触控板 快捷键
  19. 4G也要捅破天!传华为将抢跑苹果,首发卫星通信连接技术
  20. 20来行的Python拼写检查器

热门文章

  1. Misc训练笔记(一)
  2. 《全面解读IPTV生态链》-转自CSDN
  3. IP流量重放与pcap文件格式解析
  4. C#语言实例源码系列-自定义ListBox背景
  5. python爬虫京东口红销售排行
  6. [机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
  7. NLPCC'22 | 一种兼具准确性和多样性的图像风格化描述生成框架
  8. 向量法计算空间点到线段的距离(python)
  9. zabbix 内存溢出 解决
  10. 数学在计算机方面的应用论文参考文献,数学论文参考文献