Skip to content

xuyisheng/ShortcutHelper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c81b376 · May 10, 2016

History

10 Commits
Dec 7, 2015
Apr 5, 2016
Nov 9, 2015
May 10, 2016
Nov 9, 2015
Dec 7, 2015
Nov 9, 2015
Nov 9, 2015
Nov 9, 2015
Nov 9, 2015
Nov 9, 2015

Repository files navigation

ShortcutLib使用指南

本项目目前还在测试阶段,请大家多提issue,共同完善。

项目意义

快速使用shortcut,避免各种ROM适配导致的各种问题。

项目可用功能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)

判断快捷方式是否存在

基础方式

    /**
     * 判断快捷方式是否存在
     * <p/>
     * 检查快捷方式是否存在 <br/>
     * <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的检查)

    /**
     * 判断快捷方式是否存在
     * <p/>
     * 不一定所有的手机都有效,因为国内大部分手机的桌面不是系统原生的<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)

更新快捷方式

    /**
     * 更新桌面快捷方式图标,不一定所有图标都有效(有可能需要系统权限)
     *
     * @param context context
     * @param title   快捷方式名
     * @param intent  快捷方式Intent
     * @param bitmap  快捷方式Icon
     */
    public static void updateShortcutIcon(Context context, String title, Intent intent, Bitmap bitmap)

需要注意的是,更新快捷方式在很多手机上都不能生效,需要系统权限。可以通过先删除、再新增的方式来实现。

为任意PackageName的App添加快捷方式

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

移除快捷方式

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

显示隐藏Launcher入口

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

使用Launcher入口需要在AndroidMainifest文件中注册新增的入口Activity,例如:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="com.xxx.xxxxx"
    android:theme="@style/Base.Theme.AppCompat.Dialog">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

使用示例

    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.hujiang.hj_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.hujiang.hj_shortcut_lib.R.mipmap.ic_launcher));
    }

    public void toggleFlowEntrance(View view) {
        FlowEntranceUtil.toggleFlowEntrance(this, HJShortcutActivity.class);
    }

    private Intent getShortCutIntent() {
        // 使用MAIN,可以避免部分手机(比如华为、HTC部分机型)删除应用时无法删除快捷方式的问题
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setClass(MainActivity.this, HJShortcutActivity.class);
        return intent;
    }

添加Badge

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

该方法可以给icon图标增加角标。

移除Badge

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