Android桌面快捷方式图标生成与删除 使用Intent与launcher交互

简介: Android桌面快捷方式图标生成与删除 使用Intent与launcher交互

通过分析Launcher的生成快捷方式的过程,找出了使用Intent发送请求,Launcher通过自己注册的 InstallShortCutReceiver和UnInstallShortCutReceiver实现了快捷方式图标的生成与移除过程。本文主要分析外部apk如何使用Intent请求生成快捷方式和移除快捷方式图标的问题。

  生成快捷方式代码:

  Java代码

private static final String ACTION_INSTALL_SHORTCUT =
  "com.android.launcher.action.INSTALL_SHORTCUT";
  /**
  * 是否可以有多个快捷方式的副本
  */
  static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate";
  Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT);
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  getString(R.string.app_name));
  shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false);
  Intent intent2 = new Intent(Intent.ACTION_MAIN);
  intent2.addCategory(Intent.CATEGORY_LAUNCHER);
  intent2.setComponent(new ComponentName(this.getPackageName(),
  ".Main"));
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  Intent.ShortcutIconResource.fromContext(this,
  R.drawable.icon));
  sendBroadcast(shortcutIntent);
  private static final String ACTION_INSTALL_SHORTCUT =
  "com.android.launcher.action.INSTALL_SHORTCUT";
  /**
  * 是否可以有多个快捷方式的副本
  */
  static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate";
  Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT);
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  getString(R.string.app_name));
  shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false);
  Intent intent2 = new Intent(Intent.ACTION_MAIN);
  intent2.addCategory(Intent.CATEGORY_LAUNCHER);
  intent2.setComponent(new ComponentName(this.getPackageName(),
".Main"));
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);
  shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  Intent.ShortcutIconResource.fromContext(this,
  R.drawable.icon));
  sendBroadcast(shortcutIntent);

  注:Intent intent2 = new Intent(Intent.ACTION_MAIN); 这个也可以换成的构造参数也可以是Intent.ACTION_CREATE_SHORTCUT,也可以生成快捷方式图标,但是这样不标准,在删除的时候如果不和这个对于相同则无法删除。所以还是用Intent.ACTION_MAIN。

  那么删除快捷方式的代码是:

  

Java代码
  private static final String ACTION_UNINSTALL_SHORTCUT =
  "com.android.launcher.action.UNINSTALL_SHORTCUT";
  Intent intent = new Intent(ACTION_UNINSTALL_SHORTCUT );
  intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);
  ComponentName comp = new ComponentName(info.activityInfo.packageName,
  info.activityInfo.name);
  intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent()
  .setComponent(comp).setAction("android.intent.action.MAIN"));
  sendBroadcast(intent);
相关文章
|
6月前
|
Android开发
Android Launcher研究(二)-----------Launcher为何物,究竟是干什么
Android Launcher研究(二)-----------Launcher为何物,究竟是干什么
186 2
|
1月前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
6月前
|
Android开发
Android 如何将定制的Launcher成为系统中唯一的Launcher
Android 如何将定制的Launcher成为系统中唯一的Launcher
218 2
|
6月前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
84 2
|
1月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
54 0
|
3月前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
326 2
|
3月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
110 12
|
3月前
|
XML Android开发 数据格式
Android实战经验之Kotlin中快速实现动态更改应用图标和名称
本文介绍在Android中通过设置多个活动别名动态更改应用图标和名称的方法,涉及XML配置及Kotlin代码示例。
157 10
|
3月前
|
JSON Android开发 数据格式
Android项目架构设计问题之实现交互响应的结构化处理如何解决
Android项目架构设计问题之实现交互响应的结构化处理如何解决
17 0
|
3月前
|
Java Android开发 UED
安卓scheme_url调端:如果手机上多个app都注册了 http或者https 的 intent。 调端的时候,调起哪个app呢?
当多个Android应用注册了相同的URL Scheme(如http或https)时,系统会在尝试打开这类链接时展示一个选择对话框,让用户挑选偏好应用。若用户选择“始终”使用某个应用,则后续相同链接将直接由该应用处理,无需再次选择。本文以App A与App B为例,展示了如何在`AndroidManifest.xml`中配置对http与https的支持,并提供了从其他应用发起调用的示例代码。此外,还讨论了如何在系统设置中管理这些默认应用选择,以及建议开发者为避免冲突应注册更独特的Scheme。