• 快速使用shortcut,适配各种ROM


    地址(徐医生的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即可,例如:

    示例
    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(thismShortcutName, getShortCutIntent())) {
                ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutNamefalse,
                        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(thismShortcutName, 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_MAINnull);
            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)





  • 相关阅读:
    Git教程
    Android 使用AIDL调用外部服务
    Android 不同文件名介绍
    详解Android首选项框架ListPreference
    Android 使用Telephony API
    Android ImageButton android:scaleType
    Java实现二维码QRCode的编码和解码
    java二维码生成与解析代码实现
    Java中转UTC时间字符串(含有T Z)为local时间
    http://www.yihaomen.com/article/java/302.htm
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/5622751.html
走看看 - 开发者的网上家园