48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)

在 android 中多个 activity 中互相访问是常见的一种操作,比如:打开系统浏览器、显示系统拨号盘等等。
做这些操作的时候,自然是需要传递一些数据过去,比如:要打开的网址、要拨打的电话号码等等。
先来看最简单的打开新的 activity 界面

            var intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)

这端代码会打开一个 SecondActivity 的界面。
如果要打开 android 系统浏览器,就需要写成这样

            var intent = Intent(Intent.ACTION_VIEW)
            intent.setData(Uri.parse("http://www.baidu.com"))
            startActivity(intent)

Intent.ACTION_VIEW 是一个常量,对应系统的浏览器。
执行这端代码,就会在系统浏览器中打开 www.baidu.com 网站。
当然,你不能忘记了需要在 AndroidManifest.xml 中设置网络访问权限

而打开系统拨号盘也是类似的做法

            var intent = Intent(Intent.ACTION_DIAL)
            intent.setData(Uri.parse("tel:13912335677"))
            startActivity(intent)

只不过,打开拨号盘对应的常量是 Intent.ACTION_DIAL
数据的设置是 tel: 13912335677,这个就是电话号码了。
以上是跳出我们自己的 app ,访问系统中其他应用的例子。在我们自己的 app 中,也是可以一样实现数据传递的。
从当前 activity 传递到另一个 activity 内数据,可以使用 intent.putExtra
下面先看代码
首先是 MainActivity 相应界面动作

        //向新界面传递数据并获得返回值
        btnSendDataForResult.setOnClickListener {
            var intent = Intent(this, SecondActivity::class.java)
            startActivityForResult(intent, 1)
        }

这里注意打开新的 activity 的方法是 startActivityForResult,这个是可以获取返回值的。参数中的第二个参数,是请求码,用来识别是哪个请求的返回。
当然,在界面文件内(activity_main.xml),有一个对应的控件按钮

    

在 SecondActivity 中,有一个实现了关闭当前 activity 的方法。把返回值的方法写在这里。

        button.setOnClickListener {
            //创建 Intent 对象,该对象会被 SecondActivity 返回
            var intent = Intent()
            //设置要返回的数据
            intent.putExtra("Who", "Love Me")
            setResult(Activity.RESULT_OK, intent)
            finish()
        }

要返回的数据值是 "Love Me",数据的识别名称是"Who"。Activity.RESULT_OK是响应码。
MainActivity就是凭借响应码来确定这个传来的参数是给它使用的。
finish()就是关闭当前的 activity 了,也就是 SecondActivity。

在MainActivity接收返回结果,需要 override onActivityResult

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        when(requestCode){
            1 -> //接收请求码为 1 的数据
            {
                Toast.makeText(this, "haha", Toast.LENGTH_LONG).show()
                if (resultCode == Activity.RESULT_OK){
                    var returnedData = data?.getStringExtra("Who")
                    btnSendDataForResult.text = returnedData?:"没返回值"
                    Log.d("MainActivity", returnedData)
                }
            }
        }
    }
48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)_第1张图片
点击“向新界面传递数据并接收返回值”

48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)_第2张图片
点击“返回”

48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参)_第3张图片
接收到返回值

我们可以注意到,弹出的提示框是接收到请求码为 1 的代码块中的代码。
而且刚才点击的按钮文字也变成了返回值。

你可能感兴趣的:(48. (android开发) activity间传递数据(打开浏览器、拨号盘、传参))