【代码】JetpackComposeKotlin分享Bitmap图片

目录

  • 1. 发送函数
  • 2. 配置fileProvider
  • 3. bitmap保存本地的函数
  • 4. 全局变量
  • 5. 封装的ButtonIcon函数

Android12在jetpack compose中使用Kotlin代码分享Bitmap图片。

1. 发送函数

@Composable
fun Share() {val context = LocalContext.currentButtonIcon(icon = Icons.Rounded.Share) {val file = File(lastSavePath)if(!file.exists()){if(!saveBitmapTemp(context)){return@ButtonIcon}}val shareIntent = Intent(Intent.ACTION_SEND)val newFile = File(lastSavePath)val uri = getUriForFile(context, "com.jeady.composeCamerax.fileprovider", newFile)shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)shareIntent.putExtra(Intent.EXTRA_STREAM, uri)shareIntent.setType("image/*")startActivity(context, Intent.createChooser(shareIntent, "发给某人"), null)}
}

2. 配置fileProvider

AndroidMinifest.xml

    <application><providerandroid:name="androidx.core.content.FileProvider"android:authorities="com.jeady.composeCamerax.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_provider" /></provider>

file_provider.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><root-path name="root" path="" /><external-files-path name="dcim_file" path="DCIM"/><external-cache-path name="cache_file" path="."/>
</paths>

3. bitmap保存本地的函数

fun saveBitmapTemp(context: Context):Boolean {lastSavePath = (context.externalCacheDir?.path ?: context.cacheDir.path) + "/cameraxx_" + Date().time + ".jpg"val fo = FileOutputStream(lastSavePath)return if(currentBitmap?.compress(Bitmap.CompressFormat.JPEG, 50, fo)==true){Toast.makeText(context, "保存缓存文件", Toast.LENGTH_SHORT).show()true}else{Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show()false}
}

4. 全局变量

var currentBitmap by mutableStateOf<Bitmap?>(null)
var lastSavePath = ""

5. 封装的ButtonIcon函数

@Composable
fun ButtonIcon(icon: ImageVector, onclick: ()->Unit) {IconButton(onClick = onclick) {Icon(icon, "", tint = Color.Gray)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考高级:信息系统生命周期概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

SpringCloudGateway网关限流

文章目录 令牌桶算法原理Gateway中限流实现 网关除了请求路由、身份验证&#xff0c;还有一个非常重要的作用&#xff1a;请求限流。当系统面对高并发请求时&#xff0c;为了减少对业务处理服务的压力&#xff0c;需要在网关中对请求限流&#xff0c;按照一定的速率放行请求。 …

Android Studio如何修改JDK版本和获知使用的Java版本

什么是JDK和Java版本&#xff1f; 首先&#xff0c;让我们简单了解一下什么是JDK和Java版本。JDK&#xff08;Java Development Kit&#xff09;是Java开发工具包的缩写&#xff0c;它包含了Java的运行环境&#xff08;JRE&#xff09;和开发工具&#xff0c;用于开发Java应用…

【数据结构】单链表的层层实现!! !

关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表&#xff0c;顺序表支持下标随机访问而且高速缓存命中率高&#xff0c;然而可能造成空间的浪费&#xff0c;同时增加数据时多次移动会造成效率低下&#xff0c;那有什么解决之法呢&#xff…

VS Code引入ECharts

Charts是一个使用 JavaScript 实现的开源可视化库&#xff0c;涵盖各行业图表&#xff0c;提供了丰富的图表类型和交互能力。&#xff08;摘自菜鸟教程&#xff09; 下面我们来介绍一下VS Code引入ECharts的相关操作 检查电脑是否已经安装了Java语言的软件开发工具包 ECharts…

设计模式-行为型设计模式-命令模式

命令模式&#xff08;Command&#xff09;&#xff0c;将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。[DP] // 命令接口 interface Command {void execute(); }// 具体命…

备考银行科技岗刷题笔记(持续更新版)

银行考试计算机部分复习 IEEE 802.11的帧格式 1.1 IEEE 802.11是什么&#xff1f; 802.11是国际电工电子工程学会&#xff08;IEEE&#xff09;为无线局域网络制定的标准。目前在802.11的基础上开发出了802.11a、802.11b、802.11g、802.11n、802.11ac。并且为了保证802.11更…

java SSM售后服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

源码特点 java SSM售后服务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采用B/…

java Lambda表达式如何实现函数递归

java Lambda表达式如何实现函数递归 Lambda表达式本身并不直接支持递归&#xff0c;因为Lambda表达式是匿名的&#xff0c;并且没有名字可以引用自身来实现递归。但是&#xff0c;你可以通过其他方式在Java中使用Lambda表达式来实现递归。 一种常见的做法是使用一个函数式接口…

Scrapy与分布式开发(2.3):lxml+xpath基本指令和提取方法详解

lxmlxpath基本指令和提取方法详解 一、XPath简介 XPath&#xff0c;全称为XML Path Language&#xff0c;是一种在XML文档中查找信息的语言。它允许用户通过简单的路径表达式在XML文档中进行导航。XPath不仅适用于XML&#xff0c;还常用于处理HTML文档。 二、基本指令和提取…

Linux下阻塞IO驱动实验实例一

一. 简介 前面几篇文章学习了 Linux内核提供的 阻塞与非阻塞IO相关的知识。 应用程序以阻塞方式访问设备时,Linux内核提供了等待队列来处理。当应用程序以非阻塞方式访问设备时,Linux内核提供了 poll轮训机制来处理。 前面一篇文章学习了Linux内核提供的非阻塞式访问设备…

Java面试题:Java多线程与并发面试题解析及知识梳理,Java中的线程池(ThreadPool)以及其重要性

随着互联网技术的不断发展&#xff0c;Java作为后端开发的主流语言之一&#xff0c;其并发编程和多线程机制得到了越来越多的关注。面试中&#xff0c;关于Java内存模型、多线程以及并发相关的知识点往往是面试官关注的重点。本文将为大家解析三道综合面试题&#xff0c;涵盖Ja…

自编C++题目——几点了 hard ver.

题目难度 普及- 题目描述 一个老外用一口不流利的中文问你&#xff1a;“Xian zai ji dian le?”你看了一眼表&#xff0c;知道了现在是&#xff0c;你准备用这样的形式写在纸上&#xff1a; Now is m past/to h. 如果你看不懂&#xff0c;举个例子&#xff1a; 当h10&…

Rollup Summer:一览 Rollup 生态全景图

作者&#xff1a;Stanley&#xff0c;Kernel Ventures 编译&#xff1a;JIN&#xff0c;Techub News 短短几天内&#xff0c;ZKFair 的总锁定价值&#xff08;TVL&#xff09;已达到 1.2 亿美元&#xff0c;目前稳定在 8000 万美元&#xff0c;使其成为增长最快的 Rollup 之一…

SHARE 100M PRO:航测领域的多面手

在无人机航测领域&#xff0c;SHARE 100M PRO单镜头航测相机以其1.02亿像素的中画幅传感器和创新技术&#xff0c;正在重塑倾斜摄影的精度和效率。这款相机不仅在城市规划和土地管理中发挥着重要作用&#xff0c;还在环境监测、基础设施建设、农业管理等多个航测领域展现出其卓…

sheng的学习笔记-AI-多分类学习:ECOC,softmax

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 基本术语&#xff1a; 若我们欲预测的是离散值&#xff0c;例如“好瓜”“坏瓜”&#xff0c;此类学习任务称为“分类”(classification)&#xff1b; 若欲预测的是连续值&#xff0c;例如西瓜成熟度0.95、0.37&#xff0c;…

软考69-上午题-【面向对象技术2-UML】-关系

一、关系 UML中有4种关系&#xff1a; 依赖&#xff1b;关联&#xff1b;泛化&#xff1b;实现。 1-1、依赖 行为&#xff08;参数&#xff09;&#xff0c;参数就是被依赖的事物&#xff0c;即&#xff1a;独立事物。 当独立事物发生变化时&#xff0c;依赖事务行为的语义也…

IDEA中如何:创建Java可执行JAR文件

在IntelliJ IDEA中&#xff0c;你可以通过以下步骤来创建Java可执行JAR文件&#xff1a; 步骤1&#xff1a;编写Java代码 首先&#xff0c;在IntelliJ IDEA中编写你的Java代码。 步骤2&#xff1a;配置项目结构 确保你的项目已经正确配置了项目结构。如果你的项目是一个Mav…

js【详解】原型 vs 原型链

原型 每个 class 都有显示原型 prototype每个实例都有隐式原型_proto_实例的_proto_指向对应 class 的 prototype 如下范例&#xff1a; class Student 创建了 实例 xialuo 获取属性 xialuo.name 或执行方法 xialuo.sayhi()时&#xff0c;先在自身属性和方法寻找&#xff0…

Visual Studio 2022 Version 17.9 新功能

Visual Studio 2022 v17.9 为广大 C 开发者引入了一系列好用的新功能和改进优化。 内存布局 现在&#xff0c;你可以使用【内存布局&#xff0c;Memory Layout】功能以可视化的方式来查看对象&#xff0c;结构体及联合体的内存布局信息&#xff0c;这可比以前需要手动查看内存…