【代码】JetpackComposeKotlin分享Bitmap图片

目录

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

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

1. 发送函数

kotlin 复制代码
@Composable
fun Share() {
    val context = LocalContext.current
    ButtonIcon(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

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

file_provider.xml

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保存本地的函数

kotlin 复制代码
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. 全局变量

kotlin 复制代码
var currentBitmap by mutableStateOf<Bitmap?>(null)
var lastSavePath = ""

5. 封装的ButtonIcon函数

kotlin 复制代码
@Composable
fun ButtonIcon(icon: ImageVector, onclick: ()->Unit) {
    IconButton(onClick = onclick) {
        Icon(icon, "", tint = Color.Gray)
    }
}
相关推荐
AFinalStone2 小时前
Android 7系统休眠唤醒(六)唤醒全链路
android·电源管理·休眠唤醒
雨白3 小时前
深入理解 Kotlin 协程 (九):互通有无,解构 Channel 缓冲策略与底层无锁机制
android·kotlin
灯塔@kuaidao4 小时前
平台交叉编译名词解释与基础流程
android
__Witheart__5 小时前
3568 Android otg模式下adb热拔插不识别
android·adb·rockchip
明天…ling7 小时前
Upload-Labs (Pass1-Pass21) 完整通关思路与源码分析
android·网络安全·渗透测试·burpsuite·upload-labs·文件上传绕过·靶场复现
__Witheart__7 小时前
3568 Android ntp校时使用
android·rockchip
wddptwd288 小时前
android studio 报错怎么处理 java.lang.NullPointerException
android·java·android studio
美狐美颜SDK开放平台8 小时前
直播APP开发,美颜SDK和相机SDK有什么区别?
android·深度学习·数码相机·ios·直播美颜sdk·视频美颜sdk
唐诺10 小时前
Android Open Accessory (AOA) 协议完全解析
android·usb·aoa
我命由我1234511 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio