目录
- [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)
}
}