Android App Shortcuts使用说明(长按快捷方式)

Shortcut

其中App Shortcuts是指在桌面长按app图标而出现的快捷方式, 可以为你的app的关键功能添加更快速的入口而不用先打开app,点击快捷方式可以访问应用功能, 并且这种快捷方式也可以被拖拽到桌面单独放置, 变成单独的桌面快捷方式.

典型应用

支付宝&腾讯新闻(每次虽然国内跟进的晚,但是阿里腾讯也算是最早跟进的一批了)


支付宝

腾讯新闻

使用方式

两种方式使用

  • 静态的: 在xml中定义, 适用于一些通用的动作.
  • 动态的: 由ShortcutManager发布, 可以根据用户的行为或者偏好添加, 可以动态更新.

静态使用

在应用的Manifest中启动Activity上添加meta-data


    
        

        
    
    

然后在res/xml/ 目录下创建 shortcuts.xml文件, 里面包含静态的shortcuts:




    
        
    

    
        
    


就这样就可以简单的创建了两个静态的Shortcut,targetClass 表示点击快捷方式跳转的页面


静态注册

动态使用

动态的shortcuts可以在用户使用app的过程中构建, 更新, 或者删除.
使用ShortcutManager可以对动态shortcuts完成下面几种操作:

  • Publish发布: setDynamicShortcuts(), addDynamicShortcuts(List);
  • Update更新: updateShortcuts(List);
  • Remove删除: removeDynamicShortcuts(List), removeAllDynamicShortcuts().

创建ShortcutInfo

private fun addShortcutWithIntent1(): ShortcutInfo? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
        ShortcutInfo.Builder(this, "Dynamic1").apply {
            setShortLabel("动态快捷1")
            setLongLabel("DynamicShortcutLong1")
            setIcon(Icon.createWithResource(this@MainActivity, R.mipmap.icon3))
            setIntent(Intent().apply {
                action = Intent.ACTION_MAIN
                setClass(this@MainActivity, DynamicTestActivity::class.java)
                putExtra("info", "Dynamic shortcuts target class with intent1")
            })
        }.build()
    } else {
        null
    }
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
    val shortcutManager = getSystemService(ShortcutManager::class.java)

    val count = shortcutManager.maxShortcutCountPerActivity
    Log.e("count",count.toString())

    val list = mutableListOf()
    addShortcutWithIntent1()?.let {
        list.add(it)
    }
    /*addShortcutWithIntent2()?.let {
        list.add(it)
    }*/
    addShortcutWithIntents()?.let {
        list.add(it)
    }
    shortcutManager.dynamicShortcuts =list
}

多个Intent构建back stack

动态的shortcut仍然可以用多个Intent来指定一个back stack, 那么打开目标Activity之后就可以返回到应用中的指定界面而不是回到launcher:

private fun addShortcutWithIntents(): ShortcutInfo? {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
        ShortcutInfo.Builder(this, "Dynamic3").apply {
            setShortLabel("动态快捷3")
            setLongLabel("DynamicShortcutLong3")
            setIcon(Icon.createWithResource(this@MainActivity, R.mipmap.icon5))
            setIntents(arrayOf(
                    Intent().apply {
                        action = Intent.ACTION_MAIN
                        setClass(this@MainActivity, MainActivity::class.java)
                        flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
                    },
                    Intent().apply {
                        action = Intent.ACTION_MAIN
                        setClass(this@MainActivity, DynamicTestActivity::class.java)
                        flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
                        putExtra("info", "Dynamic shortcuts target class with intents")
                    }
            )
            )
        }.build()
    } else {
        null
    }
}

动态添加


动态添加

shortcut数量

val count = shortcutManager.maxShortcutCountPerActivity
Log.e("count",count.toString())

目前虽然说是 5 个,但实际最多只能添加 4 个(最多添加 4 个 Shortcuts 以保持在启动器中显示的样式最佳)

如图实际是静态两个加上动态三个实际上只显示了四个


数量问题

疑问?

静态使用 长按后显示的是android:shortcutLongLabel的值,如果不设置android:shortcutLongLabel则显示android:shortcutShortLabel

动态使用 长按后显示的是setShortLabel的值

github地址 ShortcutsDemo

你可能感兴趣的:(Android App Shortcuts使用说明(长按快捷方式))