地址(徐医生的GitHub):https://github.com/xuyisheng/ShortcutHelper

常用API

  1.     /**
  2.      * 添加快捷方式
  3.      *
  4.      * @param context      context
  5.      * @param actionIntent 要启动的Intent
  6.      * @param name         name
  7.      * @param allowRepeat  是否允许重复
  8.      * @param iconBitmap   快捷方式图标
  9.      */
  10.     public static void addShortcut(Context context, Intent actionIntent, String name, boolean allowRepeat, Bitmap iconBitmap)  

  11.      /**
  12.      * 移除快捷方式
  13.      *
  14.      * @param context      context
  15.      * @param actionIntent 要启动的Intent
  16.      * @param name         name
  17.      */
  18.     public static void removeShortcut(Context context, Intent actionIntent, String name)  

  19.    /**
  20.     * 更新桌面快捷方式图标,需要注意的是,更新快捷方式在很多手机上都不能生效,需要系统权限。可以通过先删除、再新增的方式来实现。
  21.     *
  22.     * @param context context
  23.     * @param title   快捷方式名
  24.     * @param intent  快捷方式Intent
  25.     * @param bitmap  快捷方式Icon
  26.     */
  27.    public static void updateShortcutIcon(Context context, String title, Intent intent, Bitmap bitmap) 

  28.     /**
  29.     * 判断快捷方式是否存在,基础方式
  30.     * <font color=red>注意:</font> 有些手机无法判断是否已经创建过快捷方式<br/>
  31.     * 因此,在创建快捷方式时,请添加<br/>
  32.     * shortcutIntent.putExtra("duplicate", false);// 不允许重复创建<br/>
  33.     * 最好使用{@link #isShortCutExist(Context, String, Intent)}
  34.     * 进行判断,因为可能有些应用生成的快捷方式名称是一样的的<br/>
  35.     *
  36.     * @param context context
  37.     * @param title   快捷方式名
  38.     * @return 是否存在
  39.     */
  40.     public static boolean isShortCutExist(Context context, String title) 

  41.      /**
  42.      * 判断快捷方式是否存在,严格方式,增加了Intent的检查
  43.      * 
  44.      * 不一定所有的手机都有效,因为国内大部分手机的桌面不是系统原生的<br/>
  45.      * 更多请参考{@link #isShortCutExist(Context, String)}<br/>
  46.      * 桌面有两种,系统桌面(ROM自带)与第三方桌面,一般只考虑系统自带<br/>
  47.      * 第三方桌面如果没有实现系统响应的方法是无法判断的,比如GO桌面<br/>
  48.      *
  49.      * @param context context
  50.      * @param title   快捷方式名
  51.      * @param intent  快捷方式Intent
  52.      * @return 是否存在
  53.      */
  54.     public static boolean isShortCutExist(Context context, String title, Intent intent)  

  55.      /**
  56.      * 为任意PackageName的App添加快捷方式
  57.      *
  58.      * @param context context
  59.      * @param pkg     待添加快捷方式的应用包名
  60.      * @return 返回true为正常执行完毕
  61.      */
  62.     public static boolean addShortcutByPackageName(Context context, String pkg)

  63.      /**
  64.      * 显示\隐藏Launcher入口
  65.      *
  66.      * @param context       context
  67.      * @param launcherClass launcherClass
  68.      */
  69.     public static void toggleFlowEntrance(Context context, Class launcherClass)

  70. 使用Launcher入口需要在AndroidMainifest文件中注册新增的入口Activity,只需添加多个如下配置的intent-filter即可,例如:
  71.  

示例

  1. public class MainActivity extends Activity {
  2.     // 快捷方式名
  3.     private String mShortcutName = "学习工具";
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_main);
  8.     }

  9.     public void addShortcutTest(View view) {
  10.         // 系统方式创建
  11.         // ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName);
  12.         // 创建前判断是否存在
  13.         if (!ShortcutSuperUtils.isShortCutExist(this, mShortcutName, getShortCutIntent())) {
  14.             ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName, false,
  15.                     BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.drawable.ocsplayer));
  16.             finish();
  17.         } else {
  18.             Toast.makeText(this, "Shortcut is exist!", Toast.LENGTH_SHORT).show();
  19.         }
  20.         // 为某个包创建快捷方式
  21.         // ShortcutSuperUtils.addShortcutByPackageName(this, this.getPackageName());
  22.     }
  23.     public void removeShortcutTest(View view) {
  24.         ShortcutUtils.removeShortcut(this, getShortCutIntent(), mShortcutName);
  25.     }
  26.     public void updateShortcutTest(View view) {
  27.         ShortcutSuperUtils.updateShortcutIcon(this, mShortcutName, getShortCutIntent(),
  28.                 BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.mipmap.ic_launcher));
  29.     }
  30.     public void toggleFlowEntrance(View view) {
  31.         FlowEntranceUtil.toggleFlowEntrance(this, ShortcutActivity.class);
  32.     }
  33.     private Intent getShortCutIntent() {
  34.         // 使用MAIN,可以避免部分手机(比如华为、HTC部分机型)删除应用时无法删除快捷方式的问题
  35.         Intent intent = new Intent(Intent.ACTION_MAIN);
  36.         intent.addCategory(Intent.CATEGORY_DEFAULT);
  37.         intent.setClass(MainActivity.this, ShortcutActivity.class);
  38.         return intent;
  39.     }

  40.     public void addBadgeInIcon(View view) {
  41.         // 添加角标测试
  42.         //        ShortcutBadger.with(getApplicationContext()).count(9);
  43.         BadgeUtil.setBadgeCount(getApplicationContext(), 4);
  44.     }
  45.     public void delBadgeInIcon(View view) {
  46.         BadgeUtil.resetBadgeCount(getApplicationContext());
  47.     }
  48.     /**
  49.      * Bug利用测试,请勿滥用
  50.      *
  51.      * @param view view
  52.      */
  53.     public void madMode(View view) {
  54.         madMode(99);
  55.     }
  56.     /**
  57.      * 清除Bug角标
  58.      *
  59.      * @param view view
  60.      */
  61.     public void cleanMadMode(View view) {
  62.         madMode(0);
  63.     }
  64.     /**
  65.      * 获取所有App的包名和启动类名
  66.      *
  67.      * @param count count
  68.      */
  69.     private void madMode(int count) {
  70.         Intent intent = new Intent(Intent.ACTION_MAIN, null);
  71.         intent.addCategory(Intent.CATEGORY_LAUNCHER);
  72.         List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);
  73.         for (int i = 0; i < list.size(); i++) {
  74.             ActivityInfo activityInfo = list.get(i).activityInfo;
  75.             String activityName = activityInfo.name;
  76.             String packageName = activityInfo.applicationInfo.packageName;
  77.             BadgeUtil.setBadgeOfMadMode(getApplicationContext(), count, packageName, activityName);
  78.         }
  79.     }
  80. }
  81.  

角标

  1.    /**
  2.      * 设置Badge 目前支持Launcher:
  3.      * <p/>
  4.      * MIUI
  5.      * Sony
  6.      * Samsung
  7.      * LG
  8.      * HTC
  9.      * Nova
  10.      *
  11.      * @param context context
  12.      * @param count   count
  13.      */
  14.     public static void setBadgeCount(Context context, int count) 

  15.       /** 重置Badge */
  16.     public static void resetBadgeCount(Context context)
  17.  

快速使用shortcut,适配各种ROM的更多相关文章

  1. Android开发中适配多种 ROM 的快捷方式是如何实现的?

    在安卓开发中,要提高开发效率,掌握一些快捷方式是必不可少的,特别是对于android入门阶段的童鞋而言,非常重要.今天小编在安卓开发教程网站上,搜罗了一些常用的Android 适配多种 ROM 的快捷 ...

  2. 【大盛】全网首发HTC One/M7 最新本地化TrickDroid9.0/固件升级/永久root/高级,快速设置/稳定,流畅经典ROM

    了解更多请关注:点击打开链接 ROM版本 HTC One/M7_TrickDroid9.0.0 ROM作者 雪狼团队-大盛   http://weibo.com/DaShengdd Android版本 ...

  3. Android 适配多种ROM的快捷方式

    快捷方式 应该来说 很多人都做过,我们就来看一下基本的快捷方式 是怎么实现的,会有什么问题? 首先 肯定要获取权限: <!-- 添加快捷方式 --> <uses-permission ...

  4. 两分钟让你明白cocos2dx的屏幕适配策略

    闲来无事,整理了一下cocos2dx的屏幕适配策略,本文适用于想快速理解cocos2dx适配的开发者. 我们先假设:以854 * 480 的屏幕为标准进行开发,当然,这也就是cocos2dx所说的设计 ...

  5. MSM8909中LK阶段LCM屏适配与显示流程分析(一)

    1.前言 在驱动开发中,我们往往需要适配一些新的屏幕或者调试一些屏幕的参数等,对于Qualcomm的MSM8909这款SoC,当启动Android系统时,会有一个LK阶段,该阶段用来启动Linux内核 ...

  6. Android 实用开源控件

    图片放大缩小: PinchImageView 体验最好的图片手势控件,不同分辨率无缝切换,可与ViewPager结合使用. GestureViews 带有手势控制的ImageView和FrameLay ...

  7. Toast与Snackbar的那点事

    背景 Toast是Android平台上的常用技术.从用户角度来看,Toast是用户与App交互最基本的提示控件:从开发者角度来看,Toast是开发过程中常用的调试手段之一.此外,Toast语法也非常简 ...

  8. Boostrap

    基本认知: Boostrap绝对是目前最流行用得最广泛的一款框架.它是一套优美,直观并且给力的web设计工具包,可以用来开发跨浏览器兼容并且美观大气的页面. Bootstrap的优缺点: 缺点: 1. ...

  9. 关于web开发前端h5框架的选择

    关于web开发前端h5框架的选择 看了很多移动版框架都是基于app混合式开发的,不是单独h5网站的基于h5开发的web框架从组件丰富度,兼容性,相关教程来说bootstrap还是最好的react和vu ...

随机推荐

  1. sql 汉字转首字母拼音

    从网络上收刮了一些,以备后用 create function fun_getPY(@str nvarchar()) returns nvarchar() as begin declare @word ...

  2. indexof()方法

    w3c手册定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 stringObject.indexOf(searchvalue,fromindex) searchva ...

  3. apache 上配置多个django工程

    我的环境是win7+python2.7.8+django1.6.4+apache2.2 废话不多说,直接进入正题: 下载对应的版本的mod_wsgi.so 第一步:添加mod_wsgi.so(记得对应 ...

  4. 反射-b

    Class pkClass=NSClassFromString(@"PKAddPassesViewController");    if (pkClass) {        NS ...

  5. Java对象引用

    1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...

  6. Nginx系列~概念与windows下环境搭建

    概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sys ...

  7. 【转】 Linux中的工作队列

    原文网址:http://blog.chinaunix.net/uid-20583479-id-1920134.html 工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以 ...

  8. winform调用WCF默认实例

    一:截图 二:调用代码 using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  9. C#文本转语音并保存wav和MP3文件

    回顾上次写博客至今都有4个多月了,最近工作比较的忙没时间写博文.以后会多坚持写博文,与大家分享下最近遇到的问题.最近因为项目需要,研究了下用C#开发TTS.下面把大体的思路给大家说说,希望对大家有所帮 ...

  10. 4Sum——LeetCode

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...