标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。