• android 创建桌面快捷方式 ShortCut


    记录下桌面快捷方式需求,在Android O及后续更高平台上,应用在桌面创建快捷方式的方法有了较多变更,从交互方式上趋向于让用户二次确认。主要效果是在桌面上生成一个和普通应用一样的图标,点击进入对应页面。

    1、桌面长按应用图标添加快捷方式

    7.0新特性Shortcut

        //桌面长按添加快捷方式
        fun addMoreItem(mContext: Context, cls: Class<Any>) {
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
                val arr = arrayOf("da", "xiao", "xiao")
                val shortcutInfoList: MutableList<ShortcutInfo> = ArrayList()
                val shortcutManager: ShortcutManager =
                    mContext.getSystemService<ShortcutManager>(ShortcutManager::class.java)
                shortcutManager.maxShortcutCountPerActivity //得到,使用ShortcutInfo.Builder设置属性
                for (i in 0..1) {
                    val intent = Intent(mContext, cls::class.java)
                    intent.action = Intent.ACTION_VIEW
                    intent.putExtra("msg", "我和" + "聊天")
                    val info = ShortcutInfo.Builder(mContext, "id$i")
                        .setShortLabel(arr[i])
                        .setLongLabel("朋友:" + arr[i])
                        .setIcon(Icon.createWithResource(mContext, R.drawable.icon))
                        .setIntent(intent)
                        .build()
                    shortcutInfoList.add(info)
                }
                shortcutManager.dynamicShortcuts = shortcutInfoList
            }
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、应用内通过点击事件触发

    在这里插入图片描述

    8.0新特性

     //应用内 弹窗添加快捷方式
        fun <T> addShortCut(
            context: Context,
            targetClass: Class<T>,
            backClass: Class<T>,
            title: String,
            shortCutId: String,
            tagId:String
        ) {
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
                val shortcutManager =
                    context.getSystemService(Context.SHORTCUT_SERVICE) as ShortcutManager
                if (shortcutManager.isRequestPinShortcutSupported) {
                  for (info in shortcutManager.pinnedShortcuts) {
                    if (tagId == info.id) {
                        //判断快捷方式是否已存在
                        isExit = true
                    }
                }
                //构建点击intent
                    val shortcutInfoIntent = Intent(context, targetClass::class.java)
                    shortcutInfoIntent.action = Intent.ACTION_VIEW //action必须设置,不然报错
                    val info = ShortcutInfo.Builder(context, shortCutId)
                        .setIcon(Icon.createWithResource(context, R.drawable.icon))
                        .setShortLabel(title).setIntent(shortcutInfoIntent).build()
                    //当添加快捷方式的确认弹框弹出来时,将被回调
                    val shortcutCallbackIntent = PendingIntent.getBroadcast(
                        context, 0, Intent(
                            context,
                            backClass::class.java
                        ), PendingIntent.FLAG_UPDATE_CURRENT
                    )
                    shortcutManager.requestPinShortcut(info, shortcutCallbackIntent.intentSender)
                } else {
                    Toast.makeText(context, "设备不支持在桌面创建快捷图标!", Toast.LENGTH_LONG).show()
                }
            }
    
        }
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    注意事项

    1、创建成功回调 shortcutCallbackIntent 可以设置发送action,在对应类进行注册广播并接收action事件
    2、在华为或者荣耀手机需要申请创建桌面快捷方式权限
    var isCreateSuccess= shortcutManager.requestPinShortcut(info, shortcutCallbackIntent.intentSender)
    可以通过isCreateSuccess 这个返回值 判断是否开启权限
    3、在小米红米手机需要申请创建桌面快捷方式权限 无法判断是否开启权限 可以增加提示弹窗,参考支付宝实现
    4、不同的机型效果不一,有点快捷方式右下角会自动添加应用logo
    5、添加数量不同机型限制不一样 尽量不要过多创建

  • 相关阅读:
    数据源报表
    SpringBoot利用Spring SPI机制实现自动按顺序加载注册JavaBean到容器中
    MySQL主从复制与读写分离
    如何迈向IPv6之IPv6过渡技术-尚文网络奎哥
    java通过socket实现https get 请求网页
    09.06app端自动化
    Cosmopolitan:一次构建,多平台原生运行的C语言库行!
    基本数据类型的包装类
    代码随想录 第6章 字符串
    特殊电脑数据恢复软件EasyRecovery2024
  • 原文地址:https://blog.csdn.net/muranfei/article/details/125446629