目的是一个消息传递对象,它告诉您要执行哪种操作。目的最重要的用途是活动的启动。目的有助于组件之间的通信。
Note: App components are the basic building blocks of App.
意向的基本用例
开始活动
活动代表应用程序中的单个屏幕,绕过意图实例,我们可以启动活动。
例子:
Kotlin
var intent = Intent(this, SecondActivity:: class.java)
startIntent(intent)
XML
. . .
XML
XML
XML
XML
XML
Kotlin
package com.example.intentfilter
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// send button on click listener
sendButton.setOnClickListener {
var intent = Intent(Intent.ACTION_SEND) // intent
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_EMAIL, "niranjantest@gmail.com")
intent.putExtra(Intent.EXTRA_SUBJECT, "This is a dummy message")
intent.putExtra(Intent.EXTRA_TEXT, "Dummy test message")
startActivity(intent)
}
// View on click listener
buttonView.setOnClickListener {
var intent = Intent(Intent.ACTION_VIEW)
startActivity(intent)
}
}
}
您可以使用putExtra()添加其他信息。
开始服务
服务是在没有用户界面的情况下在后台执行操作的组件,这也称为后台进程。
传送广播
广播是任何应用均可接收的消息。在android中,系统会传送各种广播系统事件,例如设备开始充电,禁用或启用飞行模式等。
意向类型
有两种类型的意图
- 明确意图:明确意图可以执行由代码设置的特定应用程序操作,如更改活动;在明确意图中,用户了解所有事情,例如单击按钮后活动将开始,并且明确意图用于在应用程序内部进行通信
- 隐式意图:隐式意图不像显式意图那样命名特定的组件,而是声明要执行的常规操作,该操作允许另一个应用程序中的组件进行处理。
例如:当您点击任何应用程序中的共享按钮时,您会看到Gmail,蓝牙和其他共享应用程序选项。
意图过滤器
- 隐式意图使用意图过滤器满足用户请求。
- 意图过滤器指定活动,服务或广播接收者可以响应的意图类型。
- 意向过滤器在Android清单文件中声明。
- 意图过滤器必须包含
例子:
XML格式
. . .
大多数意图过滤器均通过其描述
- <动作>,
- <类别>和
- <数据> 。
1. <动作>
句法:
XML格式
将动作添加到意图过滤器。
常见动作示例:
- ACTION_VIEW:当您掌握了一些活动可以向用户显示的信息时,可以将其与startActivity()一起使用,例如在图库应用程序中显示图像或在地图应用程序中查看地址
- ACTION_SEND:当您拥有一些用户可以通过其他应用程序(例如电子邮件应用程序或社交共享应用程序)共享的数据时,应与startActivity()一起使用。
2. <类别>
句法:
XML格式
将类别名称添加到意图过滤器。一个字符串,其中包含有关应处理意图的组件类型的附加信息。
常见类别的示例:
- CATEGORY_BROWSABLE:目标活动允许其自己由网络浏览器启动以显示链接引用的数据。
3. <数据>
句法:
XML格式
将数据规范添加到意图过滤器。规范可以只是数据类型,也可以只是URI,或者既可以是数据类型也可以是URI。
Note: Uniform Resource Identifier (URI) is a string of characters used to identify a resource. A URI identifies a resource either by location, or a name, or both.
使用演示应用程序实现意图过滤器
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:将依赖项添加到build.gradle(Module:app)文件
将以下依赖项添加到build.gradle(Module:app)文件。我们添加这两个依赖项是因为避免在MainActivity.kt文件中使用findViewById() 。尝试一下,否则使用常规方法,例如findViewById() 。
apply plugin: ‘kotlin-android’
apply plugin: ‘kotlin-android-extensions’
步骤3:使用activity_main.xml文件
导航到应用程序> res>布局> activity_main.xml,然后将以下代码添加到该文件中。以下是activity_main.xml文件的代码。
XML格式
步骤4:使用AndroidManifest.xml文件
以下是AndroidManifest.xml文件的代码。
XML格式
步骤5:使用MainActivity.kt文件
转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。
科特林
package com.example.intentfilter
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// send button on click listener
sendButton.setOnClickListener {
var intent = Intent(Intent.ACTION_SEND) // intent
intent.type = "text/plain"
intent.putExtra(Intent.EXTRA_EMAIL, "niranjantest@gmail.com")
intent.putExtra(Intent.EXTRA_SUBJECT, "This is a dummy message")
intent.putExtra(Intent.EXTRA_TEXT, "Dummy test message")
startActivity(intent)
}
// View on click listener
buttonView.setOnClickListener {
var intent = Intent(Intent.ACTION_VIEW)
startActivity(intent)
}
}
}
输出说明:
点击发送按钮,您将看到一个类似这样的屏幕,
现在选择Gmail应用,
现在转到我们的应用程序,然后单击查看按钮,
我们的应用程序虚拟应用程序。您可以使用这些选项中的任何应用程序,因为我们正在使用视图意图过滤器。