110/18 - Android 10以上图片剪裁

Android 10以上就很简单,直接使用MediaStore抓到图片路径,然後送给图片剪裁就好

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val selection = "${MediaStore.Images.ImageColumns.DISPLAY_NAME} = '$pictureName'"
    val orderBy = "${MediaStore.Images.ImageColumns.DATE_ADDED} DESC"
    val uriQuery = contentResolver.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        null,
        selection,
        null,
        orderBy
    ) ?: return@registerForActivityResult
    
    uriQuery.moveToFirst()
    
    val pictureId =
        uriQuery.getLong(uriQuery.getColumnIndex(MediaStore.Images.ImageColumns._ID))
    val pictureUri = ContentUris.withAppendedId(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        pictureId
    )
    
    val contentValue = ContentValues().apply {
        this.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, cropPictureName)
        this.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/jpeg")
        this.put(
            MediaStore.Images.ImageColumns.RELATIVE_PATH,
            "${Environment.DIRECTORY_PICTURES}/AndroidSystem"
        )
    }
    
    val cropUri = contentResolver.insert(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        contentValue
    )
    
    intent.setDataAndType(pictureUri, "image/*")
    intent.putExtra(MediaStore.EXTRA_OUTPUT, cropUri)
    cropPictureResultLauncher.launch(intent)
    return@registerForActivityResult
}

<<:  Teachable Machine (TM)

>>:  第19车厢-娃!网页必备的响应式轮播效果怎麽刻?

Day28 softirq, tasklet, workqueue

前言 昨天连滚带爬的走出了 interrupt的泥淖,希望之後能够有空把他弄得更清楚,今天要讲的东西...

初学者跪着学JavaScript Day30 : 初学者跪着学JavaScript 到微蹲了吗

说总结前再简单复习Promise、 Async、 生成器 Promise new promise的c...

鼠年全马铁人挑战 WEEK 39:封包测试工具 - Charles (四)

           Photo on charlesproxy.com 前言 前几周分别介绍了 ...

Day 16 - 函数与物件互动3

接下来我们就可以制作一个myflower的object 去制作一个绽放花点的设定 Learp 使用 ...

DAY7 MongoDB 资料更新(Update)

DAY7 MongoDB 资料更新(Update) 更新(update) 资料更新(Update)如...