ShortcutLib使用指南

jopen 8年前發布 | 8K 次閱讀 Android開發 移動開發 ShortcutHelper

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)

項目地址: https://github.com/xuyisheng/ShortcutHelper

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!