浅谈Android添加快捷方式ShortCut

众所周知application有4种启动方式:

  • 点击app启动
  • 快捷方式
  • 通知跳转
  • 输入命令(adb命令等)

今天给大家简单介绍一下快捷方式启动的用法~

快捷方式介绍

谷歌官方在Android 7.1(API 25)新增了桌面长按弹出菜单,并且在8.0(API 26)以后可以固定快捷方式至桌面上。围绕桌面快捷方式的需求也比较多,例如微信将联系人、小程序都可以添加至桌面;简书将“写文章”添加至桌面;高德将“坐标信息”添加到桌面。

快捷方式情景再现

将某个应用添加到桌面

长按应用打开某一个功能

快捷方式使用

将某个应用添加到桌面

先看代码,后面我会将这些代码写成工具类供大家使用:

	/**
     * @param context       当前content
     * @param targetClass   快捷图标打开的界面
     * @param backClass     打开后按返回键返回的界面
     * @param shortCutId    shortCut 唯一id
     * @param shortCutIcon  桌面上显示的图标
     */
    public void AddShortCut(Context context, Class targetClass, Class backClass, int shortCutId, int shortCutIcon) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE);
            if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) {
                Intent shortcutInfoIntent = new Intent(context, targetClass);
                shortcutInfoIntent.setAction(Intent.ACTION_VIEW);

                ShortcutInfo info = new ShortcutInfo.Builder(context, "id" + shortCutId)
                        .setIcon(Icon.createWithResource(context, shortCutIcon)).
                                setShortLabel(titles[shortCutId]).setIntent(shortcutInfoIntent).build();

                PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(context, 0, new Intent(context, backClass), PendingIntent.FLAG_UPDATE_CURRENT);
                shortcutManager.requestPinShortcut(info, shortcutCallbackIntent.getIntentSender());
            }
        } else {
            Toast.makeText(context, "设备不支持在桌面创建快捷图标!", Toast.LENGTH_LONG).show();
        }
    }

测试:

	shortUtil.AddShortCut(
            this,
            MainActivity::class.java,
            MainActivity::class.java,
            2,
            R.drawable.ic_launcher_background
        )

效果图(1.1):

修改快捷方式:

	/**
     * @param context       上下文
     * @param cls           要跳转的页面
     * @param shortCutId    shortCut 唯一id
     * @param shortCutIcon  桌面上显示的图标
     * @param shortCutLabel 桌面图标下方显示的文字
     */
    public void updItem(Context context, Class<?> cls, int shortCutId, int shortCutIcon, String shortCutLabel) {
        Intent intent = new Intent(context, cls);
        intent.setAction(Intent.ACTION_VIEW);
        intent.putExtra("msg", titles[shortCutId]);

        ShortcutInfo info = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
            info = new ShortcutInfo.Builder(context, "id" + shortCutId)
                    .setIcon(Icon.createWithResource(context, shortCutIcon))
                    .setShortLabel(shortCutLabel)
                    .setIntent(intent)
                    .build();
            sm.updateShortcuts(Arrays.asList(info));
        }
    }

测试:

	shortUtil.updItem(
            this,
            ModifyActivity::class.java,
            2,
            R.drawable.ic_launcher_background,
            "修改快捷方式成功"
        )

效果图(1.2):

禁用快捷方式:

 /**
     * 禁止使用快捷方式
     *
     * @param index 禁止使用下标
     */
    public void remove(int index) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
            sm.removeAllDynamicShortcuts();
            List<String> list = new ArrayList<String>();
            list.add("id" + index);
            sm.disableShortcuts(list);
        }
    }

测试:

 shortUtil.remove(2)

效果图(1.3):

长按应用打开某一个功能:

这里以Fragment举例:

先来看看最终的效果:

主要代码:

    private static int[] icons = {R.drawable.ic_launcher_background, R.drawable.ic_launcher_foreground,  R.drawable.ic_launcher_background, R.drawable.ic_launcher_foreground,};

    private static String[] titles = {"首页", "我的", "详情", "设置"};

/**
     * 设置默认快捷方式
     *
     * @param context 上下文
     * @param ast     跳转页面
     */
    public void setShortCuts(Context context, Class ast) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
            ArrayList<ShortcutInfo> list = new ArrayList<>();

            for (int i = 0; i < titles.length; i++) {
                Intent intent = new Intent(context, ast);
                intent.setAction(Intent.ACTION_VIEW);
                intent.putExtra("msg", titles[i]);
                intent.putExtra(SHORTCUT_TAB_INDEX, i);
                intent.addCategory("android.intent.category.LAUNCHER");

                ShortcutInfo build = new ShortcutInfo.Builder(context, "id" + i)
                        .setShortLabel(titles[i])
                        .setLongLabel(titles[i])
                        .setIcon(Icon.createWithResource(context, icons[i]))
                        .setIntent(intent)
                        .build();
                list.add(build);

            }
            sm.setDynamicShortcuts(list);
        } else {
            Toast.makeText(context, "该设备不支持快捷方式", Toast.LENGTH_SHORT).show();
        }
    }

在Application中注册一下:

 

记得在清单文件声明哦

 // 保存按钮
        val radiolist = listOf(radioButton1, radioButton2, radioButton3, radioButton4)

        //快捷方式打开
        initShort {
            val arg0 = intent?.extras?.getInt(ShortCutUtil.SHORTCUT_TAB_INDEX)
            if (arg0 != null) {
                val let = arg0.let {
                    radioGroup.getChildAt(it)
                }
                val bun = Bundle()
                bun["title"] = (let as RadioButton).text as String
                //传值
                blankFragment.setArguments(bun)

                radiolist[arg0].isChecked = true
            }
        }

	 private fun initShort(arg0: () -> Unit) {
        arg0.invoke()
    }

	private operator fun Bundle.set(key: String, value: String) {
	    this.putString(key, value)
	}

注意:这段代码使用kotlin写的,因为刚创建项目的时候只能创建kotlin,我就懒的改了

Fragment代码很简单,通过Arguments获取到值赋值到TextView上即可这里就不贴代码了

以上就是浅谈Android添加快捷方式ShortCut的详细内容,更多关于Android快捷方式的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android应用创建桌面快捷方式代码

    android的快捷方式比较简单,就是发一个系统的广播,然后为快捷方式设置Intent--- package com.xikang.android.slimcoach.utils; /** * @author huiych * 创建快捷方式 * @created 2013-02-21 * */ import android.content.Intent; import android.os.Parcelable; import com.xikang.android.slimcoach.AppXi

  • Android编程实现创建,删除,判断快捷方式的方法

    本文实例讲述了Android编程实现创建,删除,判断快捷方式的方法.分享给大家供大家参考,具体如下: /** * 为程序创建桌面快捷方式 ,这样写,在程序卸载的时候,快捷方式也会一并删除 */ private void addShortcut() { Intent shortcutIntent = new Intent( "com.android.launcher.action.INSTALL_SHORTCUT"); // 快捷方式的名称 shortcutIntent.putExtra

  • Android应用创建多个快捷方式

    有时候如果想让我们的应用在桌面上创建多个快捷方式,我们可以在Manifest.xml文件中对相应的activity进行声明. <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light" > <activity android:name=".Pu

  • Android编程创建桌面快捷方式的常用方法小结【2种方法】

    本文实例讲述了Android编程创建桌面快捷方式的常用方法.分享给大家供大家参考,具体如下: Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还要再隐藏一层呢?当然喜欢桌面干净的就比较喜欢第二个了. 第一个是通过广播(Broadcast)的形式向Luncher发送请求生成快捷方式的. 在网上找到关于这方面的注册信息. <!--设置wallpapaer的activit

  • Android如何创建桌面快捷方式

    Android创建桌面的快捷方式 概述 :创建桌面快捷方式相当与创建一个程序的入口,就像我们程序在安装完毕后会自动创建一个图标到桌面.其实创建桌面快捷方式跟创建一个程序入口差不多,但是像QQ会话一样创建一个QQ好友的会话快捷方式,就得动态的创建图标,名字了. 1.首先权限是必不可少的 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 2.然后就是在你项目配置

  • 浅谈Android添加快捷方式ShortCut

    众所周知application有4种启动方式: 点击app启动 快捷方式 通知跳转 输入命令(adb命令等) 今天给大家简单介绍一下快捷方式启动的用法~ 快捷方式介绍 谷歌官方在Android 7.1(API 25)新增了桌面长按弹出菜单,并且在8.0(API 26)以后可以固定快捷方式至桌面上.围绕桌面快捷方式的需求也比较多,例如微信将联系人.小程序都可以添加至桌面:简书将"写文章"添加至桌面:高德将"坐标信息"添加到桌面. 快捷方式情景再现 将某个应用添加到桌面

  • 浅谈Android获取ImageView上的图片,和一个有可能遇到的问题

    1.在获取图片前先调用setDrawingCacheEnabled(true)这个方法: 举例:mImageView.setDrawingCacheEnabled(true); 2.之后可以通过getDrawingCache()获取图片 举例:Bitmap obmp = Bitmap.createBitmap(mImageView.getDrawingCache());  //获取到Bitmap的图片 3.获取完图片后记得调用setDrawingCacheEnabled(false) 举例:mI

  • 浅谈android性能优化之启动过程(冷启动和热启动)

    本文介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,分享给大家,具体如下: 一.应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动. 2.热启动:当启动应用时,后台已有该应用的进程(例:按back键.home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热

  • 浅谈Android中Service的注册方式及使用

    Service通常总是称之为"后台服务",其中"后台"一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: 1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与Notification界面结合使用的): 2.具有较长时间的运行特性. 1.Service AndroidManifest.xml 声明 一般而言,从Service的启动方式上

  • 浅谈Android studio 生成apk文件时的 key store path 的问题

    使用Android studio生成apk文件时,Key store path 是密钥库文件地址的意思,新手菜鸟会想,我怎么知道他在哪里,其实他的地址是你来决定的. 如下图,你选择一个文件夹后,填写file name,然后点击ok就生成了. 大佬们见怪了~ 补充知识:AndroidStudio每次打开项目不自动打开上一次打开的文件.每次打包都需要重新输入key store path 最近在运行AS时,发现每次打开都要重新的打开目录及打开相关的文件,打包必须重新添加签名文件,我也是醉了. 问题原因

  • 浅谈Android Studio3.6 更新功能

    前言 下载google CodeLab的程序时,提示要更新3.6版本才能运行程序,于是更新了一下,看看有什么新功能. 界面设计工具 这次更新了一些设计工具,比如Layout Editor 和 Resource Manager. 现在,在XML或设计工具的颜色选择器中,Android Studio会在您的应用程序中填充颜色资源,以便您快速选择和替换颜色资源值. 拆分视图并放大设计编辑器 设计编辑器(例如,布局编辑器和导航编辑器)现在提供一个拆分视图,使您可以同时查看UI的"设计"视图和&

  • 浅谈 Android 7.0 多窗口分屏模式的实现

    从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又能做些什么? Android 7.0 添加了对同时显示多个 APP 的支持.在手持设备上,两个 APP 可以在分屏模式下并排运行. 嗯,大概就是这样: 分屏模式的适配 我们如何才能让自己的 APP 支持分屏模式呢? 若项目的 targetSDKVersion 大于等于24,那么可以在 AndroidManif

  • 浅谈android @id和@+id的区别

    今天,简单讲讲android里关于@id和@+id的区别. 之前,自己在布局里无论什么情况都使用@+id,可是后来发现有些代码用的是@id,自己不知道这两者之间有什么区别.于是就在网上查找资料,最终是解决了问题.这里记录一下. Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值.id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后面使用"+",表示当修改完某个布局文件并保存后,系统会自动在R.

  • 浅谈Android Studio 4.1 更新内容

    概览 Android Studio 4.1 目前已经发布,该版本共修复了2370 个 bug 以及 275 个 issue,主要包含如下新增功能: 设计 Material Design 组件库的更新 开发 Database Inspector 功能 直接在 Android Studio 中运行模拟器 Dagger 导航支持 使用 TensorFlow Lite 模型 构建与测试 Android 模拟器支持折叠屏 Apply Changes 更新 从 AAR 中导出 C/C++ 中的依赖 Nati

  • 浅谈Android Studio 的四种打包方式

    虽然这个博客的内容很简单,但是作为新手的我还是百度了好久才掌握了Android Studio的打包方式,希望对后来人有所帮助.打包的第一种方式 (1)在Android Studio 中选中app这么module,选择菜单栏""Build--Generate signed APK"" (2)弹出窗口 (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密钥库跳过) 点击"Create new..."按钮创建密钥库 Key store

随机推荐