Android图片选择及拍照的整体解决方案(兼容:6.0权限+7.0Provider)

Unity安卓相机相册权限全版本适配:从运行时权限到作用域存储实战 在移动应用开发中,运行时权限管理是保障用户隐私与功能实现的核心机制。其原理在于系统将敏感权限(如相机、存储)的授予时机从安装时推迟到应用运行时,由用户动态控制。这一机制的技术价值在于平衡了应用功能需求与用户数据安全,是构建可信应用的基础。随着安卓系统迭代,权限模型持续演进,尤其在访问外部存储时,安卓11引入的作用域存储(Scoped Storage)规范,进一步收紧了文件访问范围,要求应用通过系统选择器或MediaStore API访问媒体文件,这直接影响了相机拍照与相册选图等常见场景的实现。对于使用Uni 阅读详情

注:本文所写内容已验证 

 

  图片选择及拍照可以说是最常见的使用场景之一,本文所使用的权限框架为Rxjava,图片框架为知乎开源的Matisse;即使使用的是框架,但还是有很多需要注意的细节点,为此写个博客梳理一下。

 

步骤一(配置):

1. 兼容7.0:

(1)在AndroidManifest增添以下内容

<application>
....
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="包名.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/名A" />
</provider>
....
</application>

(2).在res文件夹下创建xml文件夹,再在里面场景:名A.xml 文件;内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths  xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="my_images"
        path="Android/data/包名.fileprovider/files/Pictures"/>
</paths >

2 .依赖:

//matisse相关依赖
implementation 'com.zhihu.android:matisse:0.5.1'
implementation 'com.github.bumptech.glide:glide:3.7.0'
//为6.0权限相关依赖
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'

这里只讲Glide框架为3.7.0的使用情况,4.0以上有些小差别,这里就不讲了;因为目前3.7就够用了

3.在项目的string.xml资源文件添加:

<plurals name="error_over_count">
    <item quantity="one">You can only select one media file</item>
    <item quantity="many">You can only select up to %1$d media files</item>
</plurals>

说明:这里是为了解决在选择超出最大设定数量图片时引起的崩溃问题,比如设定最多能选2张图,选第3张时爆出异常:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/zhihu/matisse/R$plurals

4.权限(所有用到的权限还是要在AndroidManifest里静态注册,因为要兼容6.0以下)

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

5.混淆【这是官方的说法,本人暂时没用混淆,所以没有验证】

如果使用 Picasso 作为图片加载引擎,在 Picasso 的 原有规则外,额外增添:

-dontwarn com.squareup.picasso.**

如果使用 Glide 作为图片加载引擎,在 Glide 的 原有规则外,额外增添:

-dontwarn com.bumptech.glide.**

步骤二(使用):

1.拍照使用:

int REQUEST_CODE=9527;    
//调用
private void onpenAlbum(Activity activity, boolean isTaking, int maxSelectable) {
        //获取权限
        new RxPermissions(activity).requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .subscribe(new Consumer<Permission>() {
                    @Override
                    public void accept(Permission permission) throws Exception {
                        //TODO 这里获取几个权限就会被调用几次,注意多权限同时申请时的后续操作
                        if (permission.granted) {
                            //TODO Matisse有很多函数供大家使用,可以自己去官方看看,这里写最少的
                            Matisse.from(activity)
                                    .choose(MimeType.ofImage())
                                    .theme(R.style.Matisse_Dracula)
                                    //使用拍照功能
                                    .capture(isTaking)
                                    .captureStrategy(new CaptureStrategy(true,
"包名.fileprovider【这里必须和刚才在AndroidManifest的application里配置的provider的authorities属性保持一致】"))
                                    .maxSelectable(maxSelectable)
                                    .forResult(REQUEST_CODE);
                        } else if (permission.shouldShowRequestPermissionRationale) {
                            Log.i(TAG, "accept: 暂时拒绝");
                        } else {
                            Log.i(TAG, "accept: 永久拒绝");
                        }
                    }
                });
}


//结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE:
                    List<Uri> mSelected = Matisse.obtainResult(data);
                    Log.d(TAG,"所选或者拍照后的uri" + mSelected);
                    break;
                default:
                    break;
            }
        }
}

 

 

 

 

 

 

 

 

Flutter基础+旅游实战项目:从环境搭建到完整App开发 跨端开发已成为移动应用提效的重要方向,性能与UI一致性是技术选型的核心考量。Flutter凭借自绘渲染引擎和组件化能力,提供了接近原生的体验,其“万物皆Widget”的理念正被越来越多开发者采用。理解Widget生命周期与状态管理(如Provider)是掌握Flutter架构的关键,也是从基础语法迈向工程实践的必经之路。在旅游、电商等典型业务场景中,一个包含环境搭建、列表详情、地图定位与图片上传的完整项目,能有效串联知识点并形成可落地的工程方案。文章梳理Flutter基础,并通过旅游实战项目展示如何构建可复 阅读详情

相关推荐

Unity集成RMBG-2.0实现实时AI抠图:ONNX与Barracuda实战指南

图像分割是计算机视觉中的基础技术,它通过像素级分类将图像中的前景与背景分离。其核心原理是利用深度神经网络学习图像特征,生成高精度遮罩。这项技术的工程价值在于能够替代传统绿幕,实现动态、高质量的实时抠图,极大降低了内容创作门槛。在游戏开发、虚拟直播、AR应用等场景中,实时背景移除需求日益增长。本文聚焦于Unity引擎,通过集成RMBG-2.0这一先进的AI背景移除模型,详细阐述了如何利用ONNX格式与Unity Barracuda推理库构建高效的实时抠图管线。内容涵盖从模型准备、数据预处理、推理执行到性能优化

weixin_33912453的博客 405

android兼容拍照相册多张,Android10以上拍照和选择相册适配以及向下兼容适配

前言最近一直被Android10相关的适配搞得焦头烂额,之前也听说过android10中的所有的视频,音频以及图片等资源为了统一的管理,统一放在一个共有的文件下,也就是所谓的沙箱。看了一下其他人写的文章,也提供了一种简单粗暴的方式也就是在清单文件application下配置#android:requestLegacyExternalStorage="true"#,但如果android11出来又得适...

weixin_29813667的博客 671

Android多媒体功能开发(14)——Camera2框架

Camera2框架的相机模型被设计成一个管道,使用相机时需要先和相机设备建立一个会话,通过该会话向相机发送请求,相机将图像数据保存到配置好的Surface,Surface就是存放图像数据的缓冲区。请求分为单次请求、重复请求和多次请求三种。

nanoage的博客 6084

一个非常好用的 Android 图片选择框架

前言几乎每个APP都需要图片选择和裁剪功能,因为涉及到相机和存储,所以该功能还是要考虑很多兼容性的。这也是github上有一大堆图片选择框架的原因,但是你会发现github上找的图片选择框架并不是简单的只有图片选择, 它还包含视频选择、视频录制、图片压缩等等一大堆功能。其实你只需要一个头像选择的功能,那些框架很多功能你根本用不到,而且代码至少也几十个类,后期有问题...

wildma的博客 929

EasyPhotos:兼容android11、android 10,相机拍照,相册选择(单选多选),文件夹图片选择(单选多选),视频选择,视频图片多类型复杂选择,各界面根据状态栏颜色智能适配状态栏字体颜色变色为深色或浅色,根据使用场景智能适配沉浸式状态栏,内部处理运行时权限,支持GlidePicassoImageloader等所有图片加载框架库的带默认勾选选中图片的能填充自定义广告的自定义Ui相机相册图片浏览选择器;更有拼图文字贴纸贴图图片缩放Bitmap图片添加水印媒体文件更新到媒体库等众多Bitmap

EasyPhotos QQ交流群: 若无法下载demo,可以在QQ交流群的群文件下载,文件名为demo-release,下载最新的即可。 无选中状态(默认UI色调)   选中状态( ) 其他功能(各功能可自选) 专辑列表(默认UI色调) 相册带广告( ) 专辑列表带广告 预览页 预览页单击图片转全屏模式 预览页缩放图片 预览页单击缩放图片显示操作栏 拼图选择页 拼图选择页 拼图页 拼图页拼图功能 拼图页文字贴纸功能 文字贴纸编辑页 示例功能列表 示例功能列表     产品特色     兼容android 11 兼容android 10 支持复杂选择情况,如当用户可选视频和图片多类型时,可以设定选择视频后不可以选择图片,反之亦然。也可以设定视频和图片各自类型的选择数。 支持绑定Glide、Picasso、Imageloader等所有图片加载库(fresco暂不支持),EasyPhotos并没

Android调用Camera实现拍照--github地址

这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中

Android相机-架构3

1)捕获的异步请求来自于框架。2)HAL 设备必须按顺序处理请求。对于每个请求,均生成输出结果元数据以及一个或多个输出图像缓冲区。3)请求和结果以及后续请求引用的信息流遵守先进先出规则。4)指定请求的所有输出的时间戳必须完全相同,以便框架可以根据需要将它们匹配在一起。5)所有捕获配置和状态(不包括 3A 例程)都包含在请求和结果中。图5. 相机HAL图中的 1-9 代表这从request到result的顺序,最先的请求1,得到了结果也是排在最前面的。

haigand的专栏 2600

拍照和选择图片框架

具体内容可以参考本链接介绍:https://www.jianshu.com/p/e333d2870afb

Android 相机CameraX框架

android Jetpack中的组件CameraX

weixin_45407364的博客 1961

不错的android原生图片选择及拍照第三方库

不错的android原生图片选择及拍照第三方库 能够适配多个android系统

PMOS缓启动电路设计实战:用LTspice优化上电时序,把60A冲击降到15A

本文通过一个实战案例,深入解析了PMOS缓启动电路如何有效抑制上电冲击电流。文章指出,低ESR电容是导致冲击电流飙升的元凶,并详细阐述了利用LTspice仿真工具,通过优化栅极电阻和栅源电容等参数,将高达60A的冲击电流成功降至15A的设计与优化过程,为电源开关电路设计提供了可复用的方法论。

onion的博客 899

android 6.0 7.0相机拍照,Android图片选择及拍照的整体解决方案(兼容:6.0权限+7.0Provider)...

注:本文所写内容已验证图片选择及拍照可以说是最常见的使用场景之一,本文所使用的权限框架为Rxjava,图片框架为知乎开源的Matisse;即使使用的是框架,但还是有很多需要注意的细节点,为此写个博客梳理一下。步骤一(配置):1. 兼容7.0:(1)在AndroidManifest增添以下内容........(2).在res文件夹下创建xml文件夹,再在里面场景:名A.xml 文件;内容如下:2 ....

weixin_34355933的博客 299

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3495

Android调用摄像头拍照和相册

这是一个调用摄像头拍照和相册选择设置头像的Android调用摄像头和相册简单示例。 一、调用相机进行拍照 1.创建文件存储相机拍摄的图片 /* 第一个参数是文件目录 第二个参数是文件的名称 应用的关联的缓存目录:就是SD卡中专门用于存放当前应用缓存数据的位置。 getExternalCacheDir()就可以获取到这个目录 /sdcard/Android/data/&lt;package ...

JunLi_YNU的博客 1686

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1307

高速特征金字塔多角度旋转模板匹配(工业零部件缺陷检测C++ Opencv版)

博主在性能较好的笔记本上测试算法全部执行效果大约为45ms,在一般配置的笔记本上博主在性能较好的笔记本上测试算法全部执行效果大约为130ms。下图即为实际检测效果。本文最后附有完整代码:Qt版和MFC版本(可直接运行)。...

认真努力,做一只会飞的毛毛虫。 5547

Android应用安全开发实战:从架构原理到代码防护

在移动应用开发领域,安全机制是保障用户数据和系统稳定的基石。其核心原理在于构建纵深防御体系,通过权限控制、数据加密和组件隔离等技术,实现从系统内核到应用层的全方位保护。对于Android开发者而言,掌握安全机制的技术价值不仅在于满足合规要求,更能显著提升应用健壮性,防止数据泄露和恶意攻击。在实际应用场景中,从权限动态申请、网络通信加密到本地数据存储,每个环节都需遵循安全最佳实践。本文聚焦Android安全开发,深入探讨了应用沙箱、运行时权限等关键热词,并提供了从架构理解到代码落地的完整解决方案,帮助开发者将

weixin_33709590的博客 474

深度学习中常用的几种卷积(下篇):膨胀卷积、可分离卷积(深度可分离、空间可分离)、分组卷积(附Pytorch测试代码)

膨胀卷积也称为扩张卷积或空洞卷积,一般可通过对标准二维卷积的卷积核设置合适的膨胀率(具体地指卷积核元素之间的距离)实现。合理利用膨胀卷积可在不引入其他参数的同时,扩大输出中元素的感受野,提高特征的全局表示能力。下面通过展示几个不同膨胀率下的卷积核大小以及感受野变化情况,可以更直观的理解:图中灰色为输入,蓝色为卷积核,黄色为输出。1)dilation=1:表示卷积核元素之间距离为1,使用0进行大小为dilation-1=0的填充(这是默认情况),因此。

NorthSmile的博客 9014

Android 相机开源框架

教你实现 Android 相机开源框架 在这一篇文章中,我们将学习如何实现一个 Android 相机开源框架。此过程将涵盖从项目设置到相机功能实现的所有关键步骤。我们将使用表格、代码示例、类图以及甘特图来帮助你更好地理解每一个环节。 流程概述 以下是整个开发流程的概述: 步骤 描述 1 创建 Android ...

weixin_26808023的博客 289

本文将详细介绍如何在 Qt (C++) 应用程序中集成 osgEarth,加载三维数字地球,并在指定经纬度添加三维模型(如飞机、建筑等)。

OSG 与 Qt 的交互通常需要处理 OpenGL 上下文。osgEarth 3.x 提供了对 Qt 的较好支持,或者可以使用。在普通 OSG 程序中,你需要手动处理坐标系转换将经纬度转为笛卡尔坐标 (XYZ)。这是实现的关键,将 OSG 的渲染循环集成到 Qt 的事件循环中。第三方库,但在本教程中,我们将展示一种通过继承。,将 Qt 的输入事件转换为 OSG 理解的。事件,这是实现交互(旋转地球、缩放)的基础。来嵌入 OSG 视图的标准方法。在这里我们初始化地球并添加模型。节点简化了这一过程。

qq_45859163的博客 1045

Dify框架面试内容整理-如何优化Dify的应用性能?

为1536维)可选用 PCA、FAISS 的量化压缩方法降低维度(如128、256、512);对知识库预览、任务流配置等页面,使用 nginx/cache-control 减少请求。API 响应耗时(P50/P95)、Token 使用量、缓存命中率、向量检索耗时;对 Prompt+输入内容计算 Hash,缓存相同请求的返回结果;使用占位符 + 函数拼接,按需组合 Prompt,而非静态长模板;数据量大时,应在构建索引前清洗冗余段落、统一格式,避免重复向量。维度越低,检索越快,但可能影响召回准确度,需平衡。

不务正业的猿 1551

android 拍照 录像,GitHub - Yaphetwyf/Camera: Android拍照录像功能

CameraAndroid拍照录像功能project里只上传了两个module录像功能步骤如下:使用录像我们分以下几步:1、打开相机—–调用 Camera.open()2、设置预览——创建SurfaceView 并调用 Camera.setPreviewDisplay(). 设置SurfaceHoder3、开始预览—–调用 Camera.startPreview()4、开始录制视频a、解锁Came...

weixin_42347750的博客 578

Agent应用实践之二十九 - 设计模式:人机协同

本章讲解了一种比较常见的设计模式:人机协同。通过一些场景举例,同时使用AgentScope本身自带的能力实现的人机协同模式,最后通过源码分析了AgentScope中如何实现。通过了解人机协同模式对于实际工程使用也是非常有用的。

代码让AI扣 305

android无感知拍照github,GitHub - jiaoery/MyCamera: Android 摄像头基础demo实现

MyCamera#Android 摄像头基础demo实现,实现android中基本的摄像头基础,并写了自定义相机的功能。有需要的朋友可以参考google的官方文档:http://www.android-doc.com/guide/topics/media/camera.html##1.利用隐式Intent 打开camera###1.1 获取图片以intent+onActivityResult的方式...

weixin_35783593的博客 908

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Camera:整体框架

这篇文章主要分下面几点来展开讲解:1)Android 最新Camera 整体框架;2)2 和HAL3的基本了解;3)Camera2 介绍;本文所写的内容基于Android 9.0一、Android最新Camera 整体框架app进程camera server进程hal进程(provider进程)。进程之间的通信都是通过binder实现,其中app和camera server通信使用AIDL。

qq_59675262的博客 528

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android相机开发实战

开源分享二(Android相机开发实战教程) 上篇博文给大家分享了两个非常实用的项目功能模块,不知道大伙感觉如何?有木有一种臭袜子味扑鼻,酸爽的赶脚!!!贱笑贱笑了~ ~ OK!不扯淡了,言归正传。本文将主要为大家介绍Android中自定义相机的开发,做Android应用的童鞋应该都知道,在应用中使用相机功能有两种方式: 调用Camera API 自定义相机 调用系统相机 由于需求不同,所以选择的方案固然也不同,至于第二种调用系统相机,这里就不过多讲解了,使用Intent对象设置一个Action动作即可

gao_chun 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Android6.0权限处理封装
下一篇: AndroidStudio突然断电后造成的项目编译崩溃解决
Coke可乐
博客等级 码龄10年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值