(安卓,移动开发)超简,超快速解决Android10的文件存储,和安装适配

news/2024/2/27 20:55:34

超简,超快速解决Android10的文件存储,和安装适配标题

安卓10的沙盒机制已经出来有一年多了,我就不介绍了,直奔主题。

最近在维护公司的几个项目,比较老了,都是用的v7v4库,所以在之前的大佬开发的时候安卓版本号还是10以下的,结果今天老板发现了在安卓10的设备上 在主应用程序中下载子应用程序会出错,更新也是,因为之前在学校的时候适配过安卓10的媒体文件的存储,所以一开始信心满满,结果就是踩了许多坑…

关于安卓10的文件存储建议看一下这篇文章,无论是媒体文件还是其他文件都描写的很详细:
https://blog.csdn.net/zhendong_hu/article/details/104921985

这篇文章里面介绍的多媒体存储有存储到公共目录和沙盒的,公共目录就是你点开相册是看得见的,存储到沙盒里点开相册是看不见的,一般是放在你程序的APP包里的,卸载APP图片也跟着一起卸载,还是挺安全和便于管理的。

然而里面存储到公共目录的方法只提到了使用ContentValues来进行操作,这有可能让一些下载框架主要是使用用File来进行操作感到头疼,所以咋们可以将uri转化为File,然后再将File转为String为保存路径来操作,话不多少,贴我自己一个小Demo里面的代码,也是以媒体文件为例子

public void saveSignImage(String fileName, Bitmap bitmap){try{//设置保存参数到ContentValues中ContentValues contentValues = new ContentValues();//设置文件名contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);//兼容Android Q和以下版本if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){//android Q中不再使用DATA字段,而用RELATIVE_PATH代替//RELATIVE_PATH是相对路径不是绝对路径//DCIM是系统文件夹,关于系统文件夹可以到系统自带的文件管理器中查看,不可以写没存在的名字contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/signImage"); //表示在DCIM下创建自己的signImage文件夹,名字可以自定义//contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "Music/signImage");} else{contentValues.put(MediaStore.Images.Media.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath());}//设置文件类型contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/PNG");//这个MIME类型可以百度,百度上基本上所有类型怎么写都有//执行insert操作,向系统文件夹中添加文件//EXTERNAL_CONTENT_URI代表外部存储器,该值不变Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); //生成UriFile ff=uritoFile(uri); //这里调用了uri转file的方法,会贴在下面Log.d("123",ff.toString());//可以像我这样去打印日志观察if (uri != null){//若生成了uri,则表示该文件添加成功//使用流将内容写入该uri中即可//  OutputStream outputStream = getContentResolver().openOutputStream(uri); 这是之前使用uri操作的FileOutputStream fos=new FileOutputStream(ff.toString());if (fos != null){bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);fos.flush();fos.close();}}}catch (Exception e){}}//uri转file的方法,很多论坛都有public File uritoFile(Uri uri,Context context){String[] arr = {MediaStore.Images.Media.DATA};Cursor cursor = context.getContentResolver().query(uri, arr, null, null, null); int imgIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();String imgPath = cursor.getString(imgIndex);File file = new File(imgPath);return  file;}

接下来就是重头戏了,
关于安卓10的文件安装,这里为什么没有提到下载呢,因为我在一开始是配的时候也以为是下载的问题,结果看了一下目录结构,apk是下载下来的,但是安装的界面系统却调用吧出来?!(在安卓10的设备上)

这是之前公司程序员自定义的目录,使用的是老的Environment.getExternalStorageDirectory()的方法获得保存路径,不过由于是自定义的目录,也下载下来了
在这里插入图片描述

然后这是我用的谷歌推荐的 getExternalFilesDir(type字段),把下载的APK保存到私人目录,也就是APP专属目录,里面也是下载下来的,却安装不上

在这里插入图片描述
然后我就在日志里面找啊找,一共出现了几个错误,然后冷静思考了下,既然系统没有给我调出安装界面,那一定就是安装的问题,所以定位到了这个错误
在这里插入图片描述
什么?!竟然说找不到这个Acitivity?明明已经把APK下载下来了啊,按理来说APK里面是有相关资源的,所以答案只有一个,没有扫描到我所在的文件夹里的文件!!然后我就把从异常那里到file:///那里复制下来 百度一下~
然后我想说的都在这个链接里面啦!↓↓↓↓↓
https://blog.csdn.net/u012881042/article/details/103890475/
额,里面所说的在res/xml里创建xml文件就是在res里创建个xml目录,然后在下面创建一个values xml文件~

提一嘴:谷歌是支持文件存储到自定义目录和沙盒目录里面的,安全性这方面在往IOS靠近,还是可以的(谷歌真坑)…

打完收工~


http://www.ppmy.cn/news/236109.html

相关文章

测试液晶显示器的软件,tLCDtest(液晶屏幕测试软件)

tLCDtest液晶屏幕测试软件是一款可以解决你在购买显示器总担心液晶显示器屏幕有问题的软件,它可以测试液晶屏幕。 相关软件软件大小版本说明下载地址 购买显示器总担心液晶显示器屏幕有问题?介绍个软件你用一下吧,用液晶屏幕测试软件tLCDtest就可测试您…

器件选型-OLED液晶显示原理和选型

一、OLED的发展历史 OLED是英文OrganIC Light-EMItting Diode的缩写,翻译过来被称为有机发光二极管或有机发光显示器。OLED 技术的研究,起源于邓青云博士(Dr.Ching Wan Tang),他出生于香港,于英属哥伦比亚大学得到化学理学士学位…

TFT、STN和CSTN液晶显示屏区别

TFT、STN和CSTN液晶显示屏区别 转自:http://blog.csdn.net/wms588/article/details/2060463 1.工作原理 STN:增大液晶分子的扭曲角。 TFT:为每个像素点设置一个开关电路,    做到完全单独的控制一个像素点 2. 品质 STN: 亮度较暗,画…

LCD与LED液晶显示屏

一、什么是LCD? LCD是液晶显示屏Liquid Crystal Display的全称,主要有TFT、UFB、TFD、STN等几种类型的液晶显示屏无法定位程序输入点于动态链接库上。   笔记本液晶屏常用的是TFT。TFT(Thin Film Transistor)是指薄膜晶…

关于嵌入式常用显示屏的总结

屏的类型 串口屏、tft液晶屏。 一、LCD接口类型 LCD(Liquid Crystal Display):又称液晶显示器。广泛应用于嵌入式、移动端、pc 端。 首先我们以传递的信号类型来区分主要有两大类: 模拟信号: VGA: Video Graphics Array 数字信号 TTL: …

计算机显示屏知识,计算机配置知识之显示屏

【导语】同学们进入学校后都有选购笔记本电脑的需求,但是笔记本电脑却有着让人眼花缭乱的配置。今天就为了帮同学们排忧解难给大家讲解一下选购电脑时的那些事,欢迎阅读! 显示屏 首先,打开一个笔记本我们最先看到的就是显示屏&…

嵌入式系统架构浅谈:硬件的选型(六) -------LCD液晶显示屏

1. 嵌入式的LCD液晶显示屏 1.1 LCD屏和OLED屏 我们知道,其实一张图画其实是由无数个小点点组成的,每个小点点各自显示自己的颜色,拼出来了一幅完整的图片。显示屏本质上也是一个图画,是通过电子元器件控制显示每个点的颜色&…

LCD与LED液晶显示屏的区别

什么是LCD LCD是液晶显示屏Liquid Crystal Display的全称,主要有TFT、UFB、TFD、STN等几种类型的液晶显示屏无法定位程序输入点于动态链接库上。笔记本液晶屏常用的是TFT。TFT(Thin Film Transistor)是指薄膜晶体管,每个液晶像素点…

如何用MASM32开发Windows应用程序

提醒:以下内容仅做参考,可自行发散。在发布作品前,请把不需要的内容删掉。IT技术日异月异,无论是初学者还是有经验的专业人士,都需要与时俱进,不断学习新技术。在学习一门新的IT技术时,都需要采…

占位智能家居市场,施耐德电气仅靠一个Wiser系统?

文丨智能相对论 作者 | 张左文 当智能家居已足够渗透入了用户生活,伴随而来的是一众企业对市场的“围猎”。 据企查查数据,截止到5月,国内涉及智能家居领域的企业数量已经超过83万家,对比起2021年的65万家,一年时间…

数智化升级必答题,尚美数智如何成为酒店行业标准答案?

文|智能相对论 作者|范柔丝 在西北的一个省会城市,加盟了两家酒店的李老板越来越明显地感受到,酒店行业正在进入一个结构性升级的阶段,而这个大方向,是智能化。 信号来自于,有不少的消费者,对酒店的“机…

骁龙778Gplus怎么样 骁龙778Gplus处理器什么水平

高通骁龙 778G Plus 芯片(采台积电 6nm,4x2.4GHz A784x1.8GHz A55,比 768G 提升 40%;还有 Adreno 642L GPU,图形性能提升 20%)。我用的手机就是活动时8折抢购的 机会不容错过 http://shouji.adiannao.cn/7 骁龙778G是高通首款6nm 5G处理器&a…

STM32H750ZBT6核心板设计

成品图 注意事项 1、主频无法设置480Mhz,只能最高设置为400Mhz 设置版本号为V版本,即稳定版本即可以设置主频为480Mhz了,不清楚自己的STM32H750是什么版本,可以查看芯片上丝印,ST公司LOGO旁边有个Y/V,即是版本号。 2…

CM311-3_YS_晨星MSO9385芯片刷机分享

浙江魔百和CM311-3_YS_晨星MSO9385芯片_刷机分享 固件特点: 1、修改dns,三网通用; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、无开机广告,无系统更新,不在被强制升级; 4、大量精简内置…

猿创征文|[CM311-1A Armbian]-烧录制作 Armbian 系统盘以及写入 CM311-1A 机顶盒的 EMMC 刷成服务器

################################################## 目录 寻找盒子系统镜像 关于镜像网站 盒子简介 卖家镜像站 s9x 芯片镜像 Ubuntu Armbian jammy Debian Armbian bullseye 默认 arm 系统账户和密码 我所使用的 Armbian Server 镜像资源 使用烧录工具烧录 Armbi…

鸿蒙系统智能屏降价,荣耀智慧屏官方大降价!这价格必须入了

01荣耀智慧屏官方大降价 马上就是双.11了,除了体内积蓄的说走就走的洪荒之力就要爆发以外, 操着大半年积攒的薪水放肆抄底也成为人们最为期待的环节。电视作为旺季抄底爆品,促销季的来临都会勾起大家换新的强烈欲望。 今年8月10日&#xff0c…

荣耀v10图片是html格式,就长这样?荣耀V10真机图赏

11月28日消息 荣耀官方今天下午14:30在北京工业大学体育馆举办了新品发布会,并在现场推出了号称“年度科技旗舰”的手机新品——荣耀V10。此外,还有国内媒体为我们带来了一组关于荣耀V10的图片,感兴趣的朋友不妨一起去看看吧。 据悉&#xff…

华为荣耀v20是android10,荣耀V20和荣耀V10买哪个好

随着华为NOVA 4的发布,接下来要期待的就是荣耀V20了。从目前曝光的信息来看,这款手机确实憋了不少大招,而且比华为NOVA 4更好的一点是它搭载的是麒麟980处理器,至于它的价格应该会与华为NOVA 4相近。 虽然荣耀V20很诱人&#xff0…

华为nova2s用哪个型号服务器,华为新品nova2S,使用三天后的感受,不比荣耀V10差...

华为新品nova2S,我是入手6G64G版本的,2999,双十二半夜起来付的钱,当天下午就到了,开箱时外观还是蛮惊艳的,三天的使用感受,不比华为另一款新品荣耀V10差。以下就从六个方面谈一谈个人的实际体验…
最新文章