在Android手机中,当某个应用程序按住一秒钟以上时,某些应用程序操作会出现在列表中。这些应用程序动作不过是执行快捷方式和在不打开应用程序的情况下执行的动作。应用程序的快捷方式是功能(快速服务)列表,可帮助用户轻松快速地跳转到应用程序中的特定功能或活动。列出并构造了快捷方式,具体取决于快捷方式提供的服务。请参阅下面的屏幕截图。
这些快捷方式可以是预定义的或硬编码的,在其整个生命周期中都不会改变(静态),因此被称为“静态快捷方式” 。可能会随时间或上下文而变化的另一组快捷方式称为“动态快捷方式” 。在本文中,我们将讨论并在Android应用程序中实现动态快捷方式。实施该应用程序的主要语言是Kotlin 。
Note: To create static shortcuts of an Android App please refer to How to Create Static Shortcuts in Android App?
已实施应用程序背后的概念
在这个项目中,创建一个Android App,其中我们只有一个活动,即MainActivity显示2个Buttons, Click和Append 。我们都没有点击。该应用程序内部编写的程序最初是显示2个快捷方式, Ask.fm和Instagram.com 。我们首先检查是否显示了这两个快捷方式。然后,我们打开该应用程序,然后单击“ Click ”按钮并关闭该应用程序。我们再次检查快捷方式,现在,它们已更改为Facebook.com和Google.com 。单击按钮已编程为动态更改快捷方式。我们再次打开该应用程序,然后单击“追加”按钮,然后关闭该应用程序。新的快捷方式NewlyAppended(测试用例)将附加到Instagram和AskFM的列表中。这样,可以更改快捷方式的数量以及其中的上下文。通常,Android系统接受多个快捷方式(在应用程序内部编程),但是对于UX,它仅显示其中4个。
方法
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:使用activity_main.xml文件
正如我们之前讨论的,在activity_main.xml文件中添加2个按钮,一个“单击”,另一个“追加”。完整的activity_main.xml文件在下面给出。
activity_main.xml
MainActivity.kt
package org.geeksforgeeks.dynamic_shortcuts
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.widget.Button
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.N_MR1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Shortcut Manager for managing the shortcuts
var shortcutManager = getSystemService(ShortcutManager::class.java)
// Defining a shortcut, Shortcut 1
var shortcut1 = ShortcutInfo.Builder(applicationContext, "ID1")
.setShortLabel("Instagram")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.instagram.com")))
.build()
// Defining a shortcut, Shortcut 2
var shortcut2 = ShortcutInfo.Builder(applicationContext, "ID2")
.setShortLabel("AskFM")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.ask.fm")))
.build()
// Show list of shortcuts when held
shortcutManager!!.dynamicShortcuts = listOf(shortcut1, shortcut2)
// When btn is clicked, changes are made to Shortcut 1 and Shortcut 2
val btn = findViewById
步骤3:使用MainActivity.kt文件
- 要构建快捷方式,需要两个元素ShortcutManager和ShortcutBuilder 。请参阅以下结构(在Kotlin中编程):
var shortcutManager = getSystemService(ShortcutManager::class.java)
var sampleShortcut = ShortcutInfo.Builder(applicationContext,”sampleID”)
.setShortLabel(“sampleName”)
.setIcon(Icon.createWithResource(applicationContext,R.drawable.sampleIcon))
.setIntent(Intent(Intent.ACTION_VIEW, ….sampleIntent…..))
.build()
shortcutManager!!.dynamicShortcuts = listOf(sampleShortcut)
快捷方式包含四个基本元素:
- setShortLabel:保留应用程序时在快捷方式上出现的字符串。
- setIcon:按住应用程序时在快捷方式上显示的图像。
- setIntent :快捷方式重定向到的活动。
- build:使用给定的实体构建快捷方式。
- 我们创建了4个Web意图,它们可以重定向到4个不同的社交网站Facebook,Instagram,AskFM,以及一个测试用例“ NewlyAppended”,用于将另一个意图添加到当前列表中。
- 在“ MainActivity.kt”文件中,声明它们并设置单击侦听器,以便在单击按钮时可以进行操作。
- 快捷方式直接声明到“ MainActivity.kt”文件中。
- 现在所有模块都准备就绪,我们可以在“ MainActivity.kt”文件中定义快捷方式
- listof是要在该列表中显示的已声明快捷方式的列表。要声明的快捷方式数量没有限制,可以是1甚至1000,但是对于UX,系统最多只允许显示4个快捷方式。现在参考下面的代码,添加注释以理解每个元素。以下是MainActivity.kt文件的完整代码。
MainActivity.kt
package org.geeksforgeeks.dynamic_shortcuts
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.widget.Button
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.N_MR1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Shortcut Manager for managing the shortcuts
var shortcutManager = getSystemService(ShortcutManager::class.java)
// Defining a shortcut, Shortcut 1
var shortcut1 = ShortcutInfo.Builder(applicationContext, "ID1")
.setShortLabel("Instagram")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.instagram.com")))
.build()
// Defining a shortcut, Shortcut 2
var shortcut2 = ShortcutInfo.Builder(applicationContext, "ID2")
.setShortLabel("AskFM")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.ask.fm")))
.build()
// Show list of shortcuts when held
shortcutManager!!.dynamicShortcuts = listOf(shortcut1, shortcut2)
// When btn is clicked, changes are made to Shortcut 1 and Shortcut 2
val btn = findViewById(R.id.btn)
btn.setOnClickListener {
shortcut1 = ShortcutInfo.Builder(applicationContext, "ID1")
.setShortLabel("Google")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com")))
.build()
shortcut2 = ShortcutInfo.Builder(applicationContext, "ID2")
.setShortLabel("Facebook")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com")))
.build()
shortcutManager!!.dynamicShortcuts = listOf(shortcut1, shortcut2)
}
// When add is clicked, a new shortcut is appended to the existing list of shortcuts
val add = findViewById(R.id.append)
add.setOnClickListener {
var shortcut3 = ShortcutInfo.Builder(applicationContext, "ID3")
.setShortLabel("NewlyAppended")
.setIcon(Icon.createWithResource(applicationContext, R.drawable.icon))
.setIntent(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.newlyAppended.com")))
.build()
shortcutManager!!.dynamicShortcuts = listOf(shortcut1, shortcut2, shortcut3)
}
}
}