`
univasity
  • 浏览: 800379 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Shortcut的添加和删除

阅读更多

1.默认的Shortcut操作
[添加]
默认安装后的应用(Launcher属性),图标都会出现在"抽屉面板"中,在里面长按并拖曳图标可以拖动到桌面,实现快捷方式的添加。

[删除]
长按桌面的图标,"抽屉面板"的小箭头会变成一个垃圾箱的图标,然后将图标拖进去就删除了。

2.对Shortcut列表进行添加/删除操作
[添加]
在默认桌面空白处长按,会弹出选择对话框,选择"Shortcut",找到要添加的应用快捷方式进行添加。

首先我们要将应用的选项添加到Shortcut列表里来,直接上代码:

/** 
 * 添加到Shortcut选项中(默认桌面上长按调出)
 *
 * 同时需要在manifest中为activity提供一个包含
 * action="android.intent.action.CREATE_SHORTCUT"的intent-filter
 */
private void addShortcutToOptions(){
      // 创建一个默认的Intent
      Intent shortcut = new Intent();
           
      //快捷方式的名称
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
      //不允许重复创建
      shortcut.putExtra("duplicate", false);
                 
      //指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
      //注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
      String appClass = this.getPackageName() + "." +this.getLocalClassName();
      ComponentName comp = new ComponentName(this.getPackageName(), appClass);
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, newIntent(Intent.ACTION_MAIN).setComponent(comp));
      // 下面的方法与上面的效果是一样的,另一种构建形式而已
//    Intent respondIntent = new Intent(this, this.getClass());
//    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, respondIntent);
           
      //快捷方式的图标
      ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
           
      // 发送到消息队列
      setResult(RESULT_OK, shortcut);
}

 

[删除]
应用重装/卸载后会自动删除

3.直接对Shortcut进行添加/删除操作(通过代码)
[添加]
要点:
1. 给Intent指定action="com.android.launcher.INSTALL_SHORTCUT"
2. 给定义为Intent.EXTRA_SHORTCUT_INENT的Intent设置与安装时一致的action(必须要有)
3. 在AndroidManifest.xml中添加权限:com.android.launcher.permission.INSTALL_SHORTCUT

/**
 * 为程序创建桌面快捷方式
 *
 * 同时需要在manifest中设置以下权限:
 * <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
 */
private void addShortcut(){
      Intent shortcut = newIntent("com.android.launcher.action.INSTALL_SHORTCUT");
                 
      // 快捷方式的名称
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
      // 不允许重复创建
      shortcut.putExtra("duplicate", false);
                 
      // 指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
      // 这里必须为Intent设置一个action,可以任意(但安装和卸载时该参数必须一致)
      String action = "com.android.action.test";
      Intent respondIntent = new Intent(this, this.getClass());
      respondIntent.setAction(action);
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, respondIntent);
      // 下面的方法与上面的效果是一样的,另一种构建形式而已
      // 注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
//    String appClass = this.getPackageName() + "." + this.getLocalClassName();
//    ComponentName comp = new ComponentName(this.getPackageName(), appClass);
//    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(action).setComponent(comp));

      // 快捷方式的图标
      ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
                 
      sendBroadcast(shortcut);
}

 

[删除]
要点:
1. 给Intent指定action="com.android.launcher.UNINSTALL_SHORTCUT"
2. 给定义为Intent.EXTRA_SHORTCUT_INENT的Intent设置与安装时一致的action(必须要有)
3. 在AndroidManifest.xml中添加权限:com.android.launcher.permission.UNINSTALL_SHORTCUT

/**
 * 删除程序的快捷方式
 *
 * 同时需要在manifest中设置以下权限:
 * <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
 */
private void delShortcut() {
      Intent shortcut = newIntent("com.android.launcher.action.UNINSTALL_SHORTCUT");
           
      // 快捷方式的名称
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));

      // 指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
      // 这里必须为Intent设置一个action,可以任意(但安装和卸载时该参数必须一致)
      String action = "com.android.action.test";
      Intent respondIntent = new Intent(this, this.getClass());
      respondIntent.setAction(action);
      shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, respondIntent);
      // 下面的方法与上面的效果是一样的,另一种构建形式而已
      // 注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
//    String appClass = this.getPackageName() + "." + this.getLocalClassName();
//    ComponentName comp = new ComponentName(this.getPackageName(), appClass);
//    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(action).setComponent(comp));
           
      sendBroadcast(shortcut);
}

 

>> 可见添加到Shortcut列表和直接添加到桌面以及删除的操作都是大同小异的,归纳如下:
1. 对应Shortcut的Intent
   1)添加到Shorcut列表时,不需要指定action
   2)添加到桌面时,需指定action="com.android.launcher.action.INSTALL_SHORTCUT"
   3)删除桌面Shortcut时,需要指定action="com.android.launcher.action.UNINSTALL_SHORTCUT"
2. 对应被设为Intent.EXTRA_SHORTCUT_INTENT的Intent
   1)添加到Shorcut列表时,不需要指定action
   2)直接添加/删除(桌面Shortcut)时,需指定一致的action(可任意)

* 这里有个问题就是:如何创建非自身应用的快捷方式?
必须知道应用的包名,然后通过Context.getPackageManager()获取到PackageManager来进行具体操作,里面提供了丰富的函数来获取应用的信息。例如,获取某个应用的图标:
Drawable getApplicationIcon(String packageName)

 

-------------------------------------------------------------------------
参考资料:
Android 向桌面添加快捷方式
Android桌面快捷方式图标生成与删除,使用Intent与launcher交互
Android创建和删除桌面快捷方式

 

-------------------------------------------------------------------------
最后上一个完整示例代码:

分享到:
评论
6 楼 woyaowenzi 2012-05-23  
发现一个bug,默认的生成的shortcut不可用。
  
原因是:addShortcutToOptions,addShortcutToDesktop,delShortcutFromDesktop传入的参数className不正确。不应该使用instance.getLocalClassName()获取class名,因为通过它取到的是ShortcutDemo,而不是com.android.shortcut.ShortcutDemo,如果使用class名是ShortcutDemo,那么,当在另外一个程序中startActivity时,就出报出这么个错误:【W/System.err(6003): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.shortcut/.ShortcutDemo}; have you declared this activity in your AndroidManifest.xml?】

原因可能是startActivity时,只从这个appliction中查找这个类,所以最终找不到对应的activity.

因此,应该使用instance.getClass().getName()来获取classname.
5 楼 univasity 2011-09-22  
可以在manifest中注册一个广播接收器,监听android.intent.action.PACKAGE_REMOVED的action。这样在应用被卸载时广播就会被触发,在里面做相应的处理。我想应该是这样的,具体未操作过。

莫言_MoYan 写道
什么时候执行删除快捷方式呢?
我的现在在卸载的时候,快捷方式删不掉。

4 楼 莫言_MoYan 2011-09-22  
什么时候执行删除快捷方式呢?
我的现在在卸载的时候,快捷方式删不掉。
3 楼 univasity 2011-03-18  
torycatkin 写道
我想问一下,如何在应用安装到手机里时,自动在桌面增加快捷方式?
需要监听哪儿事件?如何处理重复添加快捷方式会报toast


“如何安装后自动增加快捷方式”是个值得探讨的问题,具体还没研究过。我目前了解到的是,桌面默认的快捷方式是被定义在Launcher项目的res/xml/default_workspace.xml中的。

至于添加操作后会产生提示,是Launcher中触发的,估计只能改Launcher源码了。

有思路的都来探讨下~~
2 楼 torycatkin 2011-03-18  
我想问一下,如何在应用安装到手机里时,自动在桌面增加快捷方式?
需要监听哪儿事件?如何处理重复添加快捷方式会报toast
1 楼 常思己过 2011-03-11  
感谢分享,之前还真不是不知道如果删除

相关推荐

    android shortcut桌面快捷方式demo

    shortcut快捷方式的添加删除与查询是否存在

    Android编程添加快捷方式(Short)到手机桌面的方法(含添加,删除及查询)

    本文实例讲述了Android编程添加快捷方式(Short)到手机桌面的方法。分享给大家供大家参考,具体如下: 权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限。 &lt;!-- 添加快捷方式 --&gt; ...

    保存为快捷方式「Save as Shortcut」-crx插件

    *(2019/08/16)-为“全部保存”添加了键盘快捷键和上下文菜单选项 -将“全部保存”下载方法从单个文件更改为单个ZIP文件,以解决操作系统连接限制的问题 -将“所有保存”下载目标从所有窗口的选项卡更改为当前窗口...

    steam-shortcut-editor:使用Node.js编辑Steam快捷方式

    蒸汽快捷编辑器npm i steam-shortcut-editor使用编辑Steam快捷方式读取/写入Steam的shortcuts.vdf文件。 该文件位于$SteamDirectory/userdata/$SteamUserId/config 。 修改文件后,将需要重新启动Steam。 如果您修改...

    WinRAR 3.80 正式版 简体中文已注册

    10. "Shortcut" 自解压脚本命令和在 "高级自解压选项" 对话框中 "添加快捷方式..."命令现在允许指定一个图标文件来让快捷方式关联一个图标文件。 11. 在 "设置/安全" 对话框中提供新的 "清除临时文件" 选项提供更好...

    WinRAR3.8(单文件,不用安装,已注册版)

    10. "Shortcut" 自解压脚本命令和在 "高级自解压选项" 对话框中 "添加快捷方式..."命令现在允许指定一个图标文件来让快捷方式关联一个图标文件。 11. 在 "设置/安全" 对话框中提供新的 "清除临时文件" 选项提供更好...

    android如何添加桌面图标和卸载程序后自动删除图标

    Intent addShortcut = new Intent(ACTION_ADD_SHORTCUT); Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R....

    Android代码-仿煎蛋网客户端

    主要是在闲暇之余一边学习Material-Design和Rx响应式编程一边练手做了这个App, 由于使用的相关的API并未与煎蛋网沟通,如果有任何侵权的地方我会及时删除相关代码,感谢~ 努力发布2.0版本中. 主要功能 新鲜事、段子...

    workflowy-for-coders:用于WorkFlowy的Google Chrome扩展程序,可在注释中添加降价支持和语法突出显示功能

    适用于WorkFlowy.com的Google Chrome扩展程序,可在注释中添加降价支持和语法突出显示功能 在出色的WorkFlowy.com中添加了一些样式调整和次要功能。 当放大到节点时,此扩展将呈现markdown类型的语法并将语法突出...

    汉化版DMcsvEditor v2.2

    DMcsvEditor是一个csv格式编辑帮助您编辑,删除,添加和修改记录。 -- 操作的内容相对比较简单。 中文选择:运行程序后选择"Language"--&gt;CH 中文内容是自己做的,程序的界面已汉化,汉化不是很完全,不影响使用...

    thelounge-plugin-shortcuts:irc 客户端 thelounge 的简单插件,允许您为命令注册快捷方式别名

    thelounge-plugin-shortcuts ...安装 如果你已经通过 NPM/Yarn 安装了 ... 删除快捷方式: /shortcut remove &lt;name&gt; ,例如/shortcut remove j 。 您可以选择让一个快捷方式运行多个命令。 为此,只需通过/shortcu

    minimo:适用于您的网络浏览器的优雅,简化的新标签页

    如果尚未向Minimo添加任何快捷方式,则应该在新标签页的顶部中心部分看到“ Add Shortcut按钮。 如果您已有快捷方式,则可以通过右键单击新标签页并选择Add shortcut来Add shortcut 。 编辑快捷方式 右键单击要编辑...

    解析Android应用启动后自动创建桌面快捷方式的实现方法

    代码如下:public class ShortcutUtil { public static void createShortCut(Activity act, int iconResId, int appnameResId) { // com.android.launcher.permission.INSTALL_SHORTCUT Intent shortcutintent =...

    android创建快捷方式demo

    android中在桌面上创建快捷方式源码,删除快捷方式在某些机器上会不成功,因此最好只添加不删除

    RAM清理软件htcAddictscleanRAM_1.7

    Version 1.6 -修正当使用关闭全部程序时语音命令和邮件服务停止+修正确定按钮没有保存列表问题+添加定时特性调试状态+修正备份不能保存语言+cleanRAM现在支持更多程序+修正用户报告的错误+界面一些小的更改+语言文件...

    kill-sticky:Chrome 扩展删除所有具有固定或粘性位置的元素

    Kill-Stick-Shortcut 基于 Alisdair McDiarmid 的 Killsticky bookmarklet 的浏览器扩展,它添加了一个键盘快捷键(在 Windows 和 Linux 上为Alt+Period ,在 macOS 上为Cmd+Period ),它在当前页面上运行这段 ...

    figma-typograf-plugin:Figma插件,用于制作出色的印刷文字

    Tyma的Typograf插件 Figma插件,用于制作良好的印刷文字。... 从“ Applications选择Figma,在Menu Title键入Typograf ,选择“ Keyboard Shortcut字段,然后按keayboard快捷按钮。 我已经将热键设置为C

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    上的菜单栏里添加菜单和图标。 1.新建Qt4 Gui Application 工程,将工程命名为MainWindow,其他选项默认 即可。 生成的窗口界面如下图。其中最上面的为菜单栏。 2.我们在Type Here 那里双击,并输入“文件(&F)”,...

    android开发使用例子

    添加附件 1. Intent it = new Intent(Intent.ACTION_SEND); 2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 3. it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/mysong.mp3[/url]");...

    chord_golang

    规划和弦我们所做的节点结构环距最近跳捷径快捷方式列表&lt;-包含所有快捷方式,在稳定期间,如果有nil指针,则将其删除迁移数据所有快捷方式均...左:1)添加#个请求的计数,2)编写测试 Join Leave Shortcut联网:D

Global site tag (gtag.js) - Google Analytics