天天看點

Android 7.1 App Shortcuts使用

Android 7.1 預覽版釋出, 其中App Shortcuts是新提供的一種快捷通路方式, 形式為長按應用圖示出現的長條, 本文介紹其用法.

Android 7.1已經發了預覽版, 這裡是API Overview: API overview.

其中App Shortcuts是新提供的一種快捷通路方式, 形式為長按應用圖示出現的長條.

Android 7.1 App Shortcuts使用

圖來自: Exploring Android Nougat 7.1 App Shortcuts

點選快捷方式可以通路應用功能, 并且這種快捷方式也可以被拖拽到桌面單獨放置.

其中App Shortcuts是指在桌面長按app圖示而出現的快捷方式, 可以為你的app的關鍵功能添加更快速的入口而不用先打開app.

Android 7.1 App Shortcuts使用

點選快捷方式可以通路應用功能, 并且這種快捷方式也可以被拖拽到桌面單獨放置, 變成單獨的桌面快捷方式(pinned shortcuts).

有兩種shortcuts:

靜态的: 在xml中定義, 适用于一些通用的動作.

動态的: 由ShortcutManager釋出, 可以根據使用者的行為或者偏好添加, 可以動态更新.

每一個應用目前最多可以有5個shortcuts(靜态 + 動态).

運作條件:

應用添加App Shortcuts是Android 7.1(API 25)的API, 是以隻能在Android 7.1的裝置上顯示, 同時需要launcher支援, 比如Pixel launcher(Pixel裝置的預設launcher), Now launcher(Nexus裝置上的launcher)現在就支援, 其他launcher也可以提供支援.

靜态的Shortcuts是寫在xml中的, 直到下一次應用更新, 不能被改變.

要添加靜态shortcuts隻需兩步:

首先, 在應用的Manifest中啟動Activity上添加<code>&lt;meta-data&gt;</code>:

然後在<code>res/xml/</code>目錄下建立<code>shortcuts.xml</code>檔案, 裡面包含靜态的shortcuts:

這就好了, 這個檔案添加了兩個shortcuts, 點選都将打開指定的Activity, 本例子中是<code>StaticShortcutActivity</code>.

上面這個檔案裡添加了兩個靜态的shortcuts, 第一個關聯了一個Activity, 點選shortcut将直接打開這個Activity, 回退的時候回到桌面.

如果你想要的效果是點選back鍵回到應用裡的某個界面, 那麼可以利用多個intents來建構back stack, 比如在第二個shortcut裡面, 點選shortcut還是打開目标Activity, 這個指定目标Activity的Intent放在最後, 但是回退會傳回到MainActivity, 即之前的那個Intent.

動态的shortcuts可以在使用者使用app的過程中建構, 更新, 或者删除.

使用ShortcutManager可以對動态shortcuts完成下面幾種操作:

Publish釋出: <code>setDynamicShortcuts()</code>, <code>addDynamicShortcuts(List)</code>;

Update更新: <code>updateShortcuts(List)</code>;

Remove删除: <code>removeDynamicShortcuts(List)</code>, <code>removeAllDynamicShortcuts()</code>.

比如添加一個動态shortcut:

點選這個shortcut會發出一個打開網頁的Intent, 讓你選擇浏覽器, 進而打開網址.

動态的shortcut仍然可以用多個Intent來指定一個back stack, 那麼打開目标Activity之後就可以傳回到應用中的指定界面而不是回到launcher:

和靜态一樣, 最後一個Intent對應的是shortcut打開的界面<code>DynamicShortcutActivity</code>, 前面的都是用來建構back stack, 即back退回到MainActivity.

注意這裡的Intent必須指定Action, 否則會抛出異常.

Shortcuts的總數不能超過5個, 即靜态和動态shortcuts加起來總數最多是五個.

當我們嘗試添加第六個shortcut時, 應用會抛出異常: <code>java.lang.IllegalArgumentException: Max number of dynamic shortcuts exceeded</code>.

雖然總數限制是5個, 但是當我正好有5個(2個靜态 + 3個動态)的時候, 長按隻顯示了4個shortcuts.

如圖:

Android 7.1 App Shortcuts使用

本文完整代碼見: Demo位址: HelloNougat.

當我們有多個Shortcuts之後, 預設它們是按照添加順序排列的, 即按照添加順序rank遞增.

可以通過<code>setRank()</code>來改變長按時它們顯示的排序:

這樣更改之後, 原先排在最遠端的<code>shortcut_dynamic</code>被移到了第三個, <code>shortcut_blog</code>被移到了它的後面.

<code>setRank()</code>不接受負值, 會抛出異常.

我們隻能改變動态shortcuts的排序, 靜态的shortcuts等級為0, 它們是按照xml中寫定的先後順序排的, 是以:

<code>靜态的shortcuts永遠離應用icon最近, 動态shortcuts在其之上排序, rank越大的離應用icon越遠.</code>

如果沒有指定rank, 則按生成的順序遞增.

App Shortcuts的官方文檔: App Shortcuts

Exploring Android Nougat 7.1 App Shortcuts

Demo位址: HelloNougat.

近期考慮加入更多Android 7 Nougat特性sample.

最後, 歡迎關注微信公衆号: 聖騎士Wind

Android 7.1 App Shortcuts使用

作者: 聖騎士Wind

出處: 部落格園: 聖騎士Wind

Github: https://github.com/mengdd

微信公衆号: 聖騎士Wind

Android 7.1 App Shortcuts使用