我们首先来看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创建快捷方式的原理(自己的理解)的更多相关文章
-
Android 中如何计算 App 的启动时间?
(转载) 已知的两种方法貌似可以获取,但是感觉结果不准确:一种是,adb shell am start -w packagename/activity,这个可以得到两个值,ThisTime和Total ...
-
Android中实现APP文本内容的分享发送与接收方法简述
谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要 ...
-
Android实例-为程序创建快捷方式(未测试)
结果: 1.因为只有小米手机,没有三星手机,没法测试.如果哪位神测试过的话,记得M我哦,谢了. 实例代码: unit Unit1; interface uses System.SysUtils, S ...
-
Android中的广播基本实现及回调方法的理解
在Android中broadcast这一节的内容其实不算多主要是牵扯到一个broadcastreceiver类,这个类是一个抽象类,下面有一个抽象方法onreceiver(),可以再我们收到网络状态变 ...
-
在Android中使App高速、简单地支持新浪微博、微信、QQ、facebook等十几个主流社交平台的分享功能
前言 在如今的APP或者游戏中,分享功能差点儿已经成为标配.分享功能不但能够满足用户的需求.也能够为产品带来很多其它的用户,甚至能够对用户的行为.活跃度.年龄段等情况进行数据统计,使得软件公司能够对产 ...
-
Android中实现app版本更新
1,获取本地程序apk版本,并开启服务(下面这段代码一般在主Activity中的onCreate()方法中执行的,并开启后台服务下载新版本的apk) //获取apk包文件的管理者对象 PackageM ...
-
Android测试(一):在Android中测试App
原文:https://developer.android.com/training/testing/index.html 测试你的App是开发过程中的重要组成部分.通过对应用程序持续的运行测试,你可以 ...
-
在ubuntu中为navicat创建快捷方式
在ubuntu中,解压navicat并不会生成快捷方式,每次运行都需要进入软件解压的目录,然后运行命令开启navicat,十分不便.今天尝试引入快捷方式,直接双击运行,感觉挺不错. 首先下载一个合适的 ...
-
android中传统的创建数据库
1.在Android工程中建立一个class类,且继承与SQLiteOpenHelper. 2.然后到Mainactivity中去new一个MyOpenHelper来找到它 3.第一次创建数据库的时候 ...
随机推荐
-
深圳本土web前端经验交流
群号:125776555 深圳本土web前端技术交流群 baidu tencent前端拒绝垃圾广告.吹水,欢迎讨论技术.跳槽经验期待您的加入
-
DOS命令大全(经典收藏)
net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...
-
Redis学习手册(List数据类型)
一.概述: 在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis ...
-
【Zend Studio】10.6.0版本设置默认字体
1.打开Windows->Prefefences 2.找到General->Appearance->Colors and Fonts->Basic->Text Font- ...
-
signal()函数说明
表头文件#include<signal.h> 功 能:设置某一信号的对应动作 函数原型:void (*signal(int signum,void(* handler)(int)))(in ...
-
java正则使用方法
import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegexMatches{ public ...
-
【BUAA-OO】第一单元作业总结
#OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...
-
中性SNP的突变年龄评估(estimate the average age of a neutral two-allele polymorphism)
假设中性突变的频率分别为P和1-P,则其突变年龄为:-4Ne[p*( logep)+(1-p)* loge (1-p)] The average age of a neutral two-allele ...
-
【题解】bzoj 4478 [Jsoi2013]侦探jyy
原题传送门 弱智搜索题 我们就枚举每个点,先判断它是否必须发生,如果没有必须发生,开始搜索它的祖先,如果祖先中有必须发生的,那么它就必须发生,如果祖先中没有必须发生的,那么搜索所有入度为0的点(除了它 ...
-
Practice1小学四则运算
本次实验是做一个自动生成小学四则运算的小程序,对于我来说是检验基础的一次实验,要运用Visual C++来编写完成,“自动生成”第一印象是要用到Random()函数,“加减乘除”则应该用到switch ...