快速使用shortcut,适配各种ROM

时间:2022-09-20 15:34:18
地址(徐医生的GitHub):https://github.com/xuyisheng/ShortcutHelper

常用API
    /**
     * 添加快捷方式
     *
     * @param context      context
     * @param actionIntent 要启动的Intent
     * @param name         name
     * @param allowRepeat  是否允许重复
     * @param iconBitmap   快捷方式图标
     */
    public static void addShortcut(Context context, Intent actionIntent, String name, boolean allowRepeat, Bitmap iconBitmap)  

     /**
     * 移除快捷方式
     *
     * @param context      context
     * @param actionIntent 要启动的Intent
     * @param name         name
     */
    public static void removeShortcut(Context context, Intent actionIntent, String name)  

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

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

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

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

     /**
     * 显示\隐藏Launcher入口
     *
     * @param context       context
     * @param launcherClass launcherClass
     */
    public static void toggleFlowEntrance(Context context, Class launcherClass)

使用Launcher入口需要在AndroidMainifest文件中注册新增的入口Activity,只需添加多个如下配置的intent-filter即可,例如:
快速使用shortcut,适配各种ROM

示例
public class MainActivity extends Activity {
    // 快捷方式名
    private String mShortcutName = "学习工具";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void addShortcutTest(View view) {
        // 系统方式创建
        // ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName);
        // 创建前判断是否存在
        if (!ShortcutSuperUtils.isShortCutExist(this, mShortcutName, getShortCutIntent())) {
            ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName, false,
                    BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.drawable.ocsplayer));
            finish();
        } else {
            Toast.makeText(this, "Shortcut is exist!", Toast.LENGTH_SHORT).show();
        }
        // 为某个包创建快捷方式
        // ShortcutSuperUtils.addShortcutByPackageName(this, this.getPackageName());
    }
    public void removeShortcutTest(View view) {
        ShortcutUtils.removeShortcut(this, getShortCutIntent(), mShortcutName);
    }
    public void updateShortcutTest(View view) {
        ShortcutSuperUtils.updateShortcutIcon(this, mShortcutName, getShortCutIntent(),
                BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.mipmap.ic_launcher));
    }
    public void toggleFlowEntrance(View view) {
        FlowEntranceUtil.toggleFlowEntrance(this, ShortcutActivity.class);
    }
    private Intent getShortCutIntent() {
        // 使用MAIN,可以避免部分手机(比如华为、HTC部分机型)删除应用时无法删除快捷方式的问题
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setClass(MainActivity.this, ShortcutActivity.class);
        return intent;
    }

    public void addBadgeInIcon(View view) {
        // 添加角标测试
        //        ShortcutBadger.with(getApplicationContext()).count(9);
        BadgeUtil.setBadgeCount(getApplicationContext(), 4);
    }
    public void delBadgeInIcon(View view) {
        BadgeUtil.resetBadgeCount(getApplicationContext());
    }
    /**
     * Bug利用测试,请勿滥用
     *
     * @param view view
     */
    public void madMode(View view) {
        madMode(99);
    }
    /**
     * 清除Bug角标
     *
     * @param view view
     */
    public void cleanMadMode(View view) {
        madMode(0);
    }
    /**
     * 获取所有App的包名和启动类名
     *
     * @param count count
     */
    private void madMode(int count) {
        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);
        for (int i = 0; i < list.size(); i++) {
            ActivityInfo activityInfo = list.get(i).activityInfo;
            String activityName = activityInfo.name;
            String packageName = activityInfo.applicationInfo.packageName;
            BadgeUtil.setBadgeOfMadMode(getApplicationContext(), count, packageName, activityName);
        }
    }
}

角标
   /**
     * 设置Badge 目前支持Launcher:
     * <p/>
     * MIUI
     * Sony
     * Samsung
     * LG
     * HTC
     * Nova
     *
     * @param context context
     * @param count   count
     */
    public static void setBadgeCount(Context context, int count) 

      /** 重置Badge */
    public static void resetBadgeCount(Context context)

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

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

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

  2. 【大盛】全网首发HTC One&sol;M7 最新本地化TrickDroid9&period;0&sol;固件升级&sol;永久root&sol;高级&comma;快速设置&sol;稳定&comma;流畅经典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屏适配与显示流程分析&lpar;一&rpar;

    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. Myeclipse打断点太多,不知道怎么一次性全删除

    1.打开Debug模式 2.菜单栏里面的Run.点击Remove all Breakpoints

  2. 使用javamail发信过程中的一些问题及解决方法

    http://www.blogjava.net/TrampEagle/archive/2006/05/26/48326.html 今天在研究javamail发信的过程中,出现了一些小问题,现总结如下, ...

  3. 微信公开课PRO版张小龙演讲全文

    今天,微信当家人张小龙通过微信官方账户发布了一则视频,视频中张小龙阐述了微信对于开放平台的一些理念和方向.张小龙用八点概括.以下是张小龙发言: 各位参加微信公开课的朋友们,大家好. 首先很遗憾这一次不 ...

  4. Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-5-6 踩踏平台是怎么炼成的

    在游戏中,有很多分来飞去的平台,这个平台长短不一.如果每种长度都去创建一张图片那是比较繁琐的事情.实际上,我们只用到3张图.分别是平台的,平台的中间部分,平台的右边.关键是平台的中间部分,两张中间部分 ...

  5. Visual Studio Tools for Unity安装及使用

    Visual Studio Tools for Unity安装及使用 转载自:CSDN 晃了一下,10.1到现在又过去两个月了,这两个月什么也没有学,整天上班下班,从这周末开始拾起unity,为了年后 ...

  6. 使用JS意识到自己主动提交表单

    今天将需要chat集成到客户的网站上去,注册用户链接登录这个网站后点击实现网站直接登录chat向上.我不停chat原来的登录界面,采纳JS当页面跳转技术,随着时间的推移自己主动填写表格.自己主动提交表 ...

  7. &lbrack;Dababase - MySQL- Linux&rsqb; 数据库安装位置

    数据库安装最好是安装在 usr/local/ 里面,因为默认的很多东西都是指向这个文件夹中的.

  8. label 的for属性总结

    一.使用介绍 1. 定义:for属性规定label与哪个表单元素绑定. <label>是专门为<input>元素服务的,为其定义标记. label 和表单控件绑定方式有两种: ...

  9. angular学习笔记&lpar;十六&rpar; -- 过滤器&lpar;1&rpar;

    本篇主要介绍过滤器的基本用法: 过滤器用来对数据进行格式的转换,数据格式的转化与逻辑无关,因此,我们使用过滤器来进行这些操作: {{... | filter2: 参数1,参数2... }} expre ...

  10. C&plus;&plus;(二十四) — 指向字符的指针为什么可以用字符串来初始化,而不是字符地址?

    一.C语言中,为什么字符串可以赋值给字符指针变量? char *p: a='; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值?? 问:一直 ...