ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

registerForActivityResult常规用法

2021-07-09 21:29:46  阅读:3926  来源: 互联网

标签:val launch registerForActivityResult register 常规 用法 ActivityResultContracts null


registerForActivityResult常规用法

使用registerForActivityResult方法来注册回调。

此方法简化数据回调的写法,并且提供了多种用途。

registerForActivityResult常规用法:

//registerForActivityResult只能在onCreate中注册。onstart之后就不能注册了
val register = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    val data = result.data
    val resultCode= result.resultCode
    val extra = data?.getStringExtra("extra")
}
register.launch(Intent(this, MainActivity::class.java))

除了基本用法,ActivityResultContracts还提供了一些ActivityResultContract的实现类,以便进行其他的操作:

RequestMultiplePermissions多个权限请求
RequestPermission单个权限请求
TakePicturePreview拍照预览
TakePicture拍照
TakeVideo摄像
PickContact选择联系人
GetContent获取各种文件的Uri
GetMultipleContents获取多个各种文件的Uri
OpenDocument打开文件
OpenMultipleDocuments打开多个文件
OpenDocumentTree打开文件夹
CreateDocument创建文件

打开相机拍照:

val register = registerForActivityResult(ActivityResultContracts.TakePicturePreview()){
	// 返回拍摄的bitmap
}
register.launch(null)

获取单个/多个权限请求:

// 单个权限获取
val register = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
    if (it) {//同意权限

    } else {//拒绝权限

    }
}
register.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    
// 多个权限获取
var permissions: Array<String> = arrayOf( Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
val register = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
    if (it[Manifest.permission.WRITE_EXTERNAL_STORAGE]!!) {// 同意
    } else {
        // 拒绝
    }
    if (it[Manifest.permission.CAMERA]!!) {// 同意
    } else {
        // 拒绝
    }
}
register.launch(permissions)

查询联系人信息:

val register = registerForActivityResult(ActivityResultContracts.PickContact()){
    if(it != null){
        val cursor = contentResolver.query(it, null, null, null, null)
            cursor?.run {
            if(cursor.moveToFirst()){
                val name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))
            }
        }
    }
}
register.launch(null)

选取文件:

val register = registerForActivityResult(ActivityResultContracts.OpenDocument()){
    // 获取的文件uri
}
register.launch(arrayOf("image/*","text/plain"))

【注意】:registerForActivityResult只能在onCreate中注册。onstart之后就不能注册了

标签:val,launch,registerForActivityResult,register,常规,用法,ActivityResultContracts,null
来源: https://blog.csdn.net/Yu1441/article/details/118614812

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有