1. 程式人生 > >Android shortcuts快捷方式實現(支付寶長按圖示彈出快捷方式入口)

Android shortcuts快捷方式實現(支付寶長按圖示彈出快捷方式入口)

前言

Android shortcuts算是比較老的技術了,現在許多諸如支付寶、百度地圖等都實現了這一功能,這一功能是Android7.1推出的新功能,但是在國內app使用的還是比較少。我們先來看一下支付寶實現的效果圖。

這樣我們在使用的時候會方便許多,個人認為這種快捷方式更適合靜態使用,比如設定等一些和資料沒有互動的地方,雖然動態註冊可以做,但是感覺不太友好。

1.新建專案

因為這個功能是Android7 推出來的,所以在新建專案的時候minsdk要設定為21,真機測試也肯定是要在Android7 以上的

2.編碼

在res目錄下新建xml目錄,新建shortcuts.xml

建一個shortcut節點

<shortcut
    android:shortcutId="settings"
    android:enabled="true"
    android:icon="@mipmap/ic_launcher"
    android:shortcutShortLabel="@string/ceshirukou"
    android:shortcutLongLabel="@string/kuaijieceshi"
    android:shortcutDisabledMessage="@string/bukeyong">

    <intent
        android:action="android.intent.action.VIEW"
        android:targetPackage="hlq.jobscheduler"
        android:targetClass="hlq.view.activity.TestACtivity" />
    <categories android:name="android.shortcut.conversation"/>
</shortcut>

shortcutId, 一個唯一的id
enabled, 表示這個shortcut是否可用
shortcutShortLabel, 這裡是配置的短名稱, 下面還會有長名稱, 如果長名稱顯示不下, 就顯示短名稱
shortcutLongLabel, 這裡是配置的長名稱, launcher會優先選擇長名稱顯示
shortcutDisabledMessage, 這個配置是在我們選擇一個不可用的shortcut時給使用者的一個提示

在intent標籤中

 targetPackage是指定一個目標應用的包名,

 targetClass是我們要跳轉的目標類

action屬性表示執行的動作可以統一使用這個,categories用上述預設即可

如果我們點選圖示想有多個快捷方式,在下面新增shortcut標籤就可以了,最多可以配置5個

3.註冊shortcut

像廣播服務那樣,需要在配置檔案中宣告編寫的shortcuts,並且必須在預設啟動的Activity中註冊,如下:
 

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data
        android:name="android.app.shortcuts"
        android:resource="@xml/shortcuts" />
</activity>

註冊好後,執行起來,我們長按app效果圖如下所示:

我們看到執行圖示沒有適配,可以去Android8.0圖示適配:https://blog.csdn.net/huangliniqng/article/details/80434952

4.動態註冊

在Android廣播中我們都知道廣播可以動態註冊和靜態註冊,那麼快捷方式也是同樣的,上述方式為靜態註冊,快捷方式入口適合開啟固定不變的頁面,如果我們開啟的介面要和資料互動,我們可以使用動態註冊方式,接下來,我們瞭解動態註冊

4.1

首先我們得到ShortManger物件

ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

然後呼叫setDynamicShortcuts(List<ShortcutInfo>)方法設定shortcuts

比如我們從陣列中得到資料,為每個資料設定快捷方式,可建的快捷方式最大個數我們可以通過

shortcutManager.getMaxShortcutCountPerActivity()得到,使用ShortcutInfo.Builder設定屬性
for(int i = 0;i < shortcutManager.getMaxShortcutCountPerActivity(); i++){
    Intent intent = new Intent(this, TestActivity3.class);
    intent.setAction(Intent.ACTION_VIEW);
    intent.putExtra("msg", "我和" + name[i] + "聊天");
    ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + i)
            .setShortLabel(name[i])
            .setLongLabel("朋友:" + name[i])
            .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher_round))
            .setIntent(intent)
            .build();
    infos.add(info);
}
shortcutManager.setDynamicShortcuts(infos);

效果圖如下圖所示:

我們可以將這些快捷方式單獨拉出來,獨立成一個小app,和qq聊天為好友設定快捷方式類似

好啦,上述就是Android開發 快捷方式的使用了

歡迎關注技術公眾號,微訊號搜尋ColorfulCode 程式碼男人

分享技術文章,投稿分享,不限技術種類,不限技術深度,讓更多人因為分享而受益。