栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Activity Result Api 的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Activity Result Api 的使用



前言

       Activity Results API 是 Google官方推荐的Activity、Fragment获取返回结果的方式。之前startActivityForResult的方法获取结果的方法谷歌已经不在推荐使用。


一、使用步骤
1.引入库

代码如下(示例):

    implementation 'androidx.appcompat:appcompat:1.3.1'

2. 以启动activity为例

代码如下(示例):

class MainActivity : AppCompatActivity() {

    private val myActivityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ activityResult ->
        if(activityResult.resultCode == Activity.RESULT_OK){
            val result = activityResult.data?.getStringExtra("result")
            Toast.makeText(applicationContext,result,Toast.LENGTH_SHORT).show()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding=ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.text.setonClickListener {
            myActivityLauncher.launch(Intent(this,MainActivity2::class.java))
        }
    }
}

第二个活动正常返回

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMain2Binding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.back.setonClickListener {
            val intent = Intent().apply {
                putExtra("result", "Hello")
            }
            setResult(Activity.RESULT_OK, intent)
            finish()
        }

    }
}


3.其他功能

除了StartActivityForResult 官方还提供了很多其他Contract 如下:

  • StartActivityForResult: 通用的Contract,不做任何转换,Intent作为输入,ActivityResult作为输出,这也是最常用的一个协定。

  • RequestMultiplePermissions:用于请求一组权限

  • RequestPermission: 用于请求单个权限

  • TakePicturePreview: 调用MediaStore.ACTION_IMAGE_CAPTURE拍照,返回值为Bitmap图片

  • TakePicture: 调用MediaStore.ACTION_IMAGE_CAPTURE拍照,并将图片保存到给定的Uri地址,返回true表示保存成功。

  • TakeVideo: 调用MediaStore.ACTION_VIDEO_CAPTURE 拍摄视频,保存到给定的Uri地址,返回一张缩略图。

  • PickContact: 从通讯录APP获取联系人

  • GetContent: 提示用选择一条内容,返回一个通过ContentResolver#openInputStream(Uri)访问原生数据的Uri地址(content://形式) 。默认情况下,它增加了 Intent#CATEGORY_OPENABLE, 返回可以表示流的内容。

  • Createdocument: 提示用户选择一个文档,返回一个(file:/http:/content:)开头的Uri。

  • OpenMultipledocuments: 提示用户选择文档(可以选择多个),分别返回它们的Uri,以List的形式。

  • OpendocumentTree: 提示用户选择一个目录,并返回用户选择的作为一个Uri返回,应用程序可以完全管理返回目录中的文档。

4 请求权限
//单个权限
private val permissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
                if (isGranted) {
                    Toast.makeText(applicationContext, "同意", Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(applicationContext, "失败", Toast.LENGTH_SHORT).show()
                }
            
        }

permissionLauncher.launch(android.Manifest.permission.READ_CONTACTS)
        
       

//多个权限
private val permissionsLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { isGrantedMap ->
            
            isGrantedMap.entries.forEach {
                if (it.value) {
                    grantedList.add(it.key)
                } else {
                    deniedList.add(it.key)
                }
            }
            
        }

permissionsLauncher.launch(arrayOf(android.Manifest.permission.READ_CONTACTS,android.Manifest.permission.CALL_PHONE))

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号