我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android无需权限调用系统相机拍照怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android无需权限调用系统相机拍照怎么实现

这篇“Android无需权限调用系统相机拍照怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android无需权限调用系统相机拍照怎么实现”文章吧。

正文

在进行一些小型APP的开发,或者是对拍照界面没有自定义要求时,我们可以用调起系统相机的方式快速完成拍照需求

和不需读写权限进行读写操作的方案一样,都是通过Intent启动系统的activity让用户进行操作,系统再将用户操作的结果告诉我们,因为过程对APP是完全透明的,所以不会侵犯用户隐私。

有两种方法可以调起系统相机拍照获取图片,我们先讲比较简单的一种

1、直接获取用户拍照结果

val launcher = registerForActivityResult(ActivityResultContracts.TakePicturePreview()) {bitmap->    bitmap ?: return@registerForActivityResult    vm.process(bitmap)}launcher.launch("image/*")

这个在旧版本的API中就等于

startActivityForResult(Intent(MediaStore.ACTION_IMAGE_CAPTURE),CODE)

等到用户完成拍照,返回我们的activity时,我们就可以得到一张经过压缩的bitmap。这个方法很简单,它的缺点就是获得的bitmap像素太低了,如果对图片像素有要求的话需要使用第二种方法

2、用户拍照之后指定相机将未压缩的图片存放到我们指定的目录

var uri: Uri? = nullval launcher =  registerForActivityResult(ActivityResultContracts.TakePicture()) {      if(it){          uri?.let { it1 -> vm.process(it1) }      }  }val picture = File(externalCacheDir?.path, "picture")picture.mkdirs()uri = FileProvider.getUriForFile(  this,  "${BuildConfig.APPLICATION_ID}.fileprovider",  File(picture, "cache"))launcher.launch(uri)

这里我逐行进行解释:

  • 首先,我们需要指定拍摄的照片要存到哪,所以我们先指定图片的存放路径为externalCacheDir.path/picture/cache 注意这张图片在文件系统中的名字就叫做cache了(没有文件后缀)。

  • 然后我们通过FileProvider构建一个有授权的Uri给系统相机,相机程序拿到我们的临时授权,才有权限将文件存放到APP的私有目录。

  • 系统相机拍照完成之后就会走到回调,如果resultCode为RESULT_OK才说明用户成功拍照并保存图片了。这样我们就能得到一张系统相机拍出来的原图的Uri,这样我们就可以用这张图片去处理业务了。

注意:使用方法二需要用到FileProvider,所以我们还要在AndroidManifest里声明

<provider  android:name="androidx.core.content.FileProvider"  android:authorities="${applicationId}.fileprovider"  android:exported="false"  android:grantUriPermissions="true">  <meta-data      android:name="android.support.FILE_PROVIDER_PATHS"      android:resource="@xml/provider_paths" /></provider>

@xml/provider_paths是我们授权访问的文件路径,这里我写的是

<paths xmlns:android="http://schemas.android.com/apk/res/android">  <external-path name="external_files" path="."/></paths>

关于这个"path.xml",其实还有一些可以补充说明的,后面有空会补上,这里我简单说明一下:

因为我们创建临时文件的时候,文件指定的目录是externalCacheDir?.path,对应的path就是external-cache-path,表示我们要临时授权的目录是externalCacheDir,如果文件目录指定的是其他路径,那path节点也需要改成代表对应文件夹的节点,这样其他应用才能访问到我们APP的私有目录。

以上就是关于“Android无需权限调用系统相机拍照怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android无需权限调用系统相机拍照怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android无需权限调用系统相机拍照怎么实现

这篇“Android无需权限调用系统相机拍照怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android无需权限调用
2023-07-05

一文详解Android无需权限调用系统相机拍照

这篇文章主要为大家介绍了Android无需权限调用系统相机拍照详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-19

Android无需权限调起系统相机怎么实现

这篇文章主要讲解了“Android无需权限调起系统相机怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android无需权限调起系统相机怎么实现”吧!在进行一些小型APP的开发,或者是
2023-07-05

Android 实现调用系统照相机拍照和录像的功能

本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button:
2022-06-06

Android实现调用系统相册和拍照的Demo示例

本文讲述了Android实现调用系统相册和拍照的Demo示例。分享给大家供大家参考,具体如下: 最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的。确实是,我记得一个
2022-06-06

Android Flutter怎么使用相机实现拍摄照片

本篇内容介绍了“Android Flutter怎么使用相机实现拍摄照片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用相机前的准备工作fl
2023-07-05

Android 调用系统相机拍摄获取照片的两种方法实现实例

Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片。下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通
2022-06-06

Android使用系统自带的相机实现一键拍照功能

今天分享的是用系统自带的相机实现一键拍照功能。public class MainActivity extends AppCompatActivity { private static final int TAKE_PHOTO = 100;
2022-06-06

Android无需读写权限通过临时授权读写用户文件怎么实现

这篇文章主要讲解了“Android无需读写权限通过临时授权读写用户文件怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android无需读写权限通过临时授权读写用户文件怎么实现”吧!在
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录