我们首先来看Android中为APP创建快捷方式的原理:

从图上可以看出,Android大致分7步完成快捷方式的创建:

第一步:Android系统的launcher程序会调用它的pickShortcut()方法去启动系统的pickActivity程序(应用);

第二步:pickActivity程序(应用)启动后会调用它的CheckIntentFilter()方法,去在系统中寻找可以创建快捷方式的应用有哪些,并且列举出来。只要第三方                     App用<Intent-filter>标签进行了相应的注册(具体如何注册请看下面的代码)就可以被发现并列举出来;

第三步:调用Choseitem()方法选择创建谁的快捷方式;

第四步:完成第三步之后,pickActivity程序(应用)会将选择的消息通过Intent返回给系统的launcher;

第五步:launcher程序获得pickActivity返回的消息后,就会知道创建谁的快捷方式,通过调用ProcessShortcut()方法去启动第三方App中负责创建快捷方式                     的Activity,这个Activity就是第二步中我们提到的用<Intent-filter>标签进行了注册的Activity;

第六步:第三方App中负责创建快捷方式的Activity会将快捷方式的名称,图标和点击后跳转路径通过Intent返回给launcher;

第七部:launcher收到返回的消息后调用本身的ComPleteAddShortcut()方法完成快捷方式的创建,并显示在桌面上;

分析完原理后,那么作为第三方开发者应该完成哪几步呢?

我们只需完成如下2步就ok了,其他的事情系统会为我们去做:

首先:用<Intent-filter>标签进行注册

<activity android:name=".CreatShortCut">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
</intent-filter>
</activity>

其中的“CreatShortCut”是负责创建快捷方式的Activity的名字。

然后:向Launcher返回相关数据

public class CreatShortCut extends Activity {

    /**
* Description
*
* @param savedInstanceState
* @see android.app.Activity#onCreate(android.os.Bundle)
*/ @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState); if (getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)) { Intent _returnIntent = new Intent();
_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "csx");// 快捷键的名字
_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,// 快捷键的ico
Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher));
_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this,
MainActivity.class));// 快捷键的跳转Intent setResult(RESULT_OK, _returnIntent);// 发送
finish();// 关闭本Activity } }
}

大功告成!!!(网上也有一些其他方法但是都很复杂,不好使用)

Android中为APP创建快捷方式的原理(自己的理解)的更多相关文章

  1. Android 中如何计算 App 的启动时间?

    (转载) 已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和Total ...

  2. Android中实现APP文本内容的分享发送与接收方法简述

    谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...

  3. Android实例-为程序创建快捷方式(未测试)

    结果: 1.因为只有小米手机,没有三星手机,没法测试.如果哪位神测试过的话,记得M我哦,谢了. 实例代码:  unit Unit1; interface uses System.SysUtils, S ...

  4. Android中的广播基本实现及回调方法的理解

    在Android中broadcast这一节的内容其实不算多主要是牵扯到一个broadcastreceiver类,这个类是一个抽象类,下面有一个抽象方法onreceiver(),可以再我们收到网络状态变 ...

  5. 在Android中使App高速、简单地支持新浪微博、微信、QQ、facebook等十几个主流社交平台的分享功能

    前言 在如今的APP或者游戏中,分享功能差点儿已经成为标配.分享功能不但能够满足用户的需求.也能够为产品带来很多其它的用户,甚至能够对用户的行为.活跃度.年龄段等情况进行数据统计,使得软件公司能够对产 ...

  6. Android中实现app版本更新

    1,获取本地程序apk版本,并开启服务(下面这段代码一般在主Activity中的onCreate()方法中执行的,并开启后台服务下载新版本的apk) //获取apk包文件的管理者对象 PackageM ...

  7. Android测试(一):在Android中测试App

    原文:https://developer.android.com/training/testing/index.html 测试你的App是开发过程中的重要组成部分.通过对应用程序持续的运行测试,你可以 ...

  8. 在ubuntu中为navicat创建快捷方式

    在ubuntu中,解压navicat并不会生成快捷方式,每次运行都需要进入软件解压的目录,然后运行命令开启navicat,十分不便.今天尝试引入快捷方式,直接双击运行,感觉挺不错. 首先下载一个合适的 ...

  9. android中传统的创建数据库

    1.在Android工程中建立一个class类,且继承与SQLiteOpenHelper. 2.然后到Mainactivity中去new一个MyOpenHelper来找到它 3.第一次创建数据库的时候 ...

随机推荐

  1. Android学习笔记(八)深入分析Service启动、绑定过程

    Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是 ...

  2. 使用Pig预测电信用户的移动路径

    实战数据: 预期结果: 测试数据: 002|2014-09-10 00-09|东油大学 002|2014-09-10 09-17|学苑小区 001|2014-09-12 00-09|东油大学 001| ...

  3. [LeetCode] Interleaving String 解题思路

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  4. nodejs 基本问题答疑

    传统服务器架构1.服务器接到请求2.创建一个新的响应程序的实例 node服务器架构1.服务器接到请求2.检查处理程序是否存在,如果存在直接处理,不存在则创建. node的做法节省了内存 ubuntu下 ...

  5. kvm usb2.0

    Virt-Manager adds support for usb2 Wednesday, April 4, 2012 - 10:40 Haydn Solomon The most recent re ...

  6. openSuSE12.1 zypper LAMP

    LAMP是由Apache MySQL PHP组成的,是在Linux下最受欢迎的软件组合之一,目前互联网上有很多网站运行在LAMP服务器上. Linux - 是富有情味的开源操作系统:Apache -  ...

  7. Caffe 编译

    Compilation Now that you have the prerequisites, edit your Makefile.config to change the paths for y ...

  8. STM32 IAP 在线更新程序 为什么有时行 有时又不行 感觉不可靠 问题解决

    搞了一天才发现 在MDK设置选项中有个"linker"选项卡 , 需要在Project->Options->Linker中将Use Memory Layout from ...

  9. 线程同步 synchronized 同步代码块 同步方法 同步锁

    一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...

  10. 如何设计一个更好的C++ ORM

    2016/11/26 "用C++的方式读写数据库,简直太棒了!" 上一篇相关文章:如何设计一个简单的C++ ORM (旧版代码)