本文概述
Android Intent是一个消息传递对象, 用于请求另一个应用程序组件执行操作。 Intent可以通过多种方式(例如, 启动活动, 启动服务, 交付广播接收器等)促进用户与应用程序组件进行通信。
Android意向主要用于:
- 启动服务
- 发起活动
- 显示网页
- 显示联系人列表
- 广播消息
- 拨打电话等
Android意向类型
Android中有两种类型的意图:
显式Intent:此意图满足应用程序组件内的请求。它采用了我们要启动的活动或服务的完全限定的类名。
intent = Intent(applicationContext, SecondActivity::class.java)
startActivity(intent)
隐式意图:此意图未指定组件名称。它调用另一个应用程序的组件来处理它。
intent = Intent(Intent.ACTION_VIEW)
intent.setData(Uri.parse("https://www.srcmini02.com/"))
startActivity(intent)
intent= Intent(Intent.ACTION_VIEW, Uri.parse("https://www.srcmini02.com/"))
startActivity(intent)
Kotlin Android显式Intent示例
在此示例中, 我们将使用显式意图从另一个活动类调用另一个活动类。使用意图, 我们将数据从第一个活动类发送到第二个活动类。第二活动类获取此数据, 并在烤面包消息中显示它们。
activity_main.xml
在activity_main.xml中添加以下代码。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="example.srcmini02.com.kotlinexplicitintent.MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:text="First Activity"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.172" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Click"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.77" />
</android.support.constraint.ConstraintLayout>
MainActivity.kt
在MainActivity.kt类中添加以下代码。在此类中, 我们将创建Intent类的实例, 并调用组件活动类SecondActivity.kt。 Intent类的putExtra(key, value)方法将数据发送到SecondActivity.kt类。 startActivity()方法启动Intent。
package example.srcmini02.com.kotlinexplicitintent
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
val id:Int = 10
val language:String = "kotlin"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener() {
intent = Intent(this, SecondActivity::class.java)
intent.putExtra("id_value", id)
intent.putExtra("language_value", language)
startActivity(intent)
}
}
}
创建另一个名为SecondActivity的活动类。
second_activity.xml
在second_activity.xml文件中, 添加以下代码。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="example.srcmini02.com.kotlinexplicitintent.SecondActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="SecondActivity"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.107" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.774" />
</android.support.constraint.ConstraintLayout>
SecondActivity.kt
在SecondActivity.kt类中添加以下代码。在此类中, 我们通过使用intent.extras在Bundle类上创建实例并在Toast消息中显示数据来接收意图数据。通过单击按钮, 我们正在调用Intent来调用MainActivity.kt类。
package example.srcmini02.com.kotlinexplicitintent
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_second.*
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val bundle:Bundle = intent.extras
val id = bundle.get("id_value")
val language = bundle.get("language_value")
Toast.makeText(applicationContext, id.toString()+" "+language, Toast.LENGTH_LONG).show()
button2.setOnClickListener(){
intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
}
}
输出:
评论前必须登录!
注册