`
univasity
  • 浏览: 809823 次
  • 性别: 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  
感谢分享,之前还真不是不知道如果删除

相关推荐

    创建和删除Shortcut的例子

    从Android N(API级别24)开始,应用需要请求`MANAGE_SHORTCUTS`权限才能执行创建、删除和更新快捷方式的操作。在`AndroidManifest.xml`中添加以下权限: ```xml ``` 并且,由于这是一个危险权限,你可能还需要在...

    Android中Shortcut的demo

    在"ShortcutsDemo"项目中,你可以找到完整的实现,包括创建、删除和更新快捷方式的代码示例。这个项目可以帮助开发者理解如何在实际应用中集成快捷方式功能,提高用户体验。 总的来说,Android的快捷方式功能为...

    Myeclipse Shortcut Key.doc

    2. **Ctrl+D**:删除当前行。快速移除不需要的代码,提高代码整洁度。 3. **Ctrl+Alt+↓/↑**:复制当前行到下/上一行。在需要重复代码的情况下,这个快捷键可以节省大量时间。 4. **Alt+↓/↑**:交换当前行与下/...

    android shortcut桌面快捷方式demo

    本篇将深入探讨如何在Android应用中实现快捷方式的添加、删除以及查询其是否存在。 首先,我们需要了解Android的Shortcut API。自Android Nougat (API 25)开始,引入了Dynamic Shortcuts,允许开发者动态创建和更新...

    删除添加快捷方式

    可以注册一个`BroadcastReceiver`来监听快捷方式的添加、删除和点击事件。使用`ShortcutManager.ACTION_SHORTCUT_CHANGED`广播接收器来监控快捷方式的状态变化。 6. **适配不同Android版本** 由于快捷方式功能是在...

    android系统判断快捷方式是否存在、添加删除快捷方式

    ### Android系统中判断快捷方式是否存在、添加与删除快捷方式的方法 在Android开发中,为应用程序创建桌面快捷方式是一项常见的需求。这不仅可以提升用户体验,还能让用户更方便地访问应用。本文将详细介绍如何在...

    shortcut-helper,一个android库可以轻松创建新的android 7.1快捷方式。.zip

    5. 删除快捷方式:如果不再需要某个快捷方式,可以使用`ShortcutHelper.removeShortcuts()`方法将其从主屏幕上移除。 除了基本的快捷方式操作,快捷方式助手还提供了错误处理、快捷方式限制检查等功能,使得开发者...

    eclipse shortcut key

    ### Eclipse 快捷键知识点详解 #### 一、概述 Eclipse是一款非常强大的开源集成开发环境(IDE),广泛应用于Java开发以及其他多种编程语言...此外,Eclipse还提供了许多其他高级功能和快捷键,值得进一步探索和学习。

    动态注册快捷方式和删除快捷键方式

    2. **添加到快捷方式列表**:然后,通过调用`ShortcutManager`的`addDynamicShortcuts()`方法将`ShortcutInfo`对象添加到快捷方式列表: ```java ShortcutManager shortcutManager = getSystemService...

    MFC添加删除快捷方式源码

    在本案例中,"MFC添加删除快捷方式源码"涉及到了在MFC应用中创建、管理和删除Windows快捷方式(Shortcut)的功能。 Windows快捷方式是一种特殊类型的文件,具有.LNK扩展名,它们指向其他文件或程序,允许用户快速...

    vs shortcut key

    - 添加/移除断点:`F9` 通过以上这些快捷键的介绍,我们可以看到Visual Studio 提供了非常丰富的功能来帮助开发者提高工作效率。无论是代码导航、编辑还是调试等方面,这些快捷键都能够极大地提升开发效率,减少...

    C#创建查看修改删除快捷方式源码

    以上代码提供了一个基本的快捷方式管理器类,包含了创建、查看、修改和删除快捷方式的方法。在实际项目中,你可以根据需求进行扩展,例如添加错误处理、日志记录等。 使用这些代码时,确保你的项目引用了`Interop....

    安卓Launcher桌面相关-android生成桌面快捷方式shortcutdemo.rar

    总结,这个"android生成桌面快捷方式shortcut demo"示例帮助开发者理解如何在Android应用中创建和管理桌面快捷方式,提高用户体验。由于代码可能需要根据具体情况进行调整,开发者需要对Android开发有基本的了解,并...

    windows_shortcut.rar_windows

    在Windows操作系统中,快捷方式是一种方便用户快速访问常用程序、文件或文件夹的链接。"windows_shortcut.rar_windows...通过"windows_shortcut.pdf"文件,你可能能获取更多关于Windows快捷方式的高级技巧和应用场景。

    android 生成和删除快捷方式

    本篇将详细介绍如何在Android中生成和删除快捷方式。 生成Android快捷方式主要涉及到`ShortcutManager`类,这是自Android 7.1 (API level 25)引入的新特性。以下步骤展示了如何创建一个快捷方式: 1. **获取...

    betbeans shortcut

    标题和描述中提到的“betbeans shortcut”实际上应该是“Netbeans shortcut”,这是因为OCR扫描错误导致的识别误差。NetBeans是一个集成开发环境,广泛应用于Java、C、C++等多种编程语言的软件开发。下面我将详细...

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

    在Android编程中,添加、删除和查询快捷方式到手机桌面是一项常见的需求,这使得用户能够快速访问应用程序或功能。以下是对这一技术的详细说明: **权限管理** 在AndroidManifest.xml文件中,添加以下权限以便执行...

    VBS脚本自删除样例

    在自删除脚本中,我们会用到FileSystemObject(FSO)对象,它是VBScript的一个内置对象,用于处理文件系统操作,如创建、删除和读取文件。 以下是实现VBS脚本自删除的核心代码: ```vbscript Option Explicit Dim...

    photoshop shortcut key

    使用矩形、椭圆选框工具(M)、裁切工具(C)、移动工具(V)、套索工具(L)、魔棒工具(W)、喷枪工具(J)、画笔工具(B)、橡皮擦工具(E...、海绵工具(O)、钢笔工具(P)、添加锚点工具(+)、删除锚点工具...

Global site tag (gtag.js) - Google Analytics