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