Android中启动选取联系人的ActivityResultLauncher时,launch方法需传入何种参数?
解决ActivityResultLauncher启动PickContact时的参数问题
嘿,我之前也碰到过一模一样的困惑,其实这个问题的核心是搞懂ActivityResultContracts.PickContact()的输入类型要求就行啦。
问题根源
PickContact()这个ActivityResultContract对应的输入类型是Void?——也就是说它本身不需要任何实际的输入参数来启动联系人选择器,但launch()方法的签名强制要求传入该类型的参数,所以你只需要传一个符合Void?类型的值,也就是null就可以了。
修改后的可运行代码
把你的点击事件代码改成下面这样就能正常触发联系人选择器了:
private val getContact = registerForActivityResult(ActivityResultContracts.PickContact()) { uri: Uri? -> Log.d(TAG, uri.toString()) } // ... button.setOnClickListener { getContact.launch(null) // 传入null即可满足Void?的参数要求 }
额外说明
你要是去看ActivityResultContracts.PickContact的源码会发现,它的createIntent方法根本不会用到传入的输入参数,所以这个null只是用来满足方法的类型约束,完全不会影响联系人选择器的功能。
内容的提问来源于stack exchange,提问作者domartynov
相关产品推荐
相关产品推荐

