創(chuàng)建快捷方式
快捷方式可幫助用戶快速訪問您的應(yīng)用的某些部分,從而為他們呈現(xiàn)特定類型的內(nèi)容。
您要如何以快捷方式來呈現(xiàn)內(nèi)容取決于您的用例,以及快捷方式的上下文是屬于應(yīng)用驅(qū)動(dòng)型還是用戶驅(qū)動(dòng)型。雖然靜態(tài)快捷方式的上下文不會(huì)更改,而動(dòng)態(tài)快捷方式的上下文會(huì)不斷變化,但這兩種情況下的上下文都由您的應(yīng)用驅(qū)動(dòng)。如果用戶選擇了希望應(yīng)用以哪種方式(例如使用固定快捷方式)向其呈現(xiàn)內(nèi)容,則此時(shí)的上下文是由用戶定義的。以下場(chǎng)景展示了各類快捷方式的一些用例:
- 靜態(tài)快捷方式最適合在用戶與應(yīng)用互動(dòng)的整個(gè)生命周期內(nèi)使用一致結(jié)構(gòu)鏈接到內(nèi)容的應(yīng)用。由于大多數(shù)啟動(dòng)器一次只能顯示四個(gè)快捷方式,因此靜態(tài)快捷方式對(duì)常見 Activity 非常有用。例如,如果用戶希望以特定的方式查看他們的日歷或電子郵件,使用靜態(tài)快捷方式可確保他們?cè)趫?zhí)行日常任務(wù)時(shí)始終獲得一致體驗(yàn)。
- 動(dòng)態(tài)快捷方式用于應(yīng)用中與上下文相關(guān)的操作。上下文相關(guān)快捷方式是專為用戶在應(yīng)用內(nèi)執(zhí)行的操作而定制的。例如,如果您構(gòu)建的游戲允許用戶在啟動(dòng)時(shí)從當(dāng)前關(guān)卡開始,您需要經(jīng)常更新該快捷方式。動(dòng)態(tài)快捷方式允許游戲在每次用戶通關(guān)后更新快捷方式。
- 固定快捷方式用于用戶驅(qū)動(dòng)的特定操作。例如,用戶可能需要將特定網(wǎng)站固定到啟動(dòng)器。這很有用,因?yàn)樗试S用戶執(zhí)行自定義操作,比如一步導(dǎo)航到網(wǎng)站,這比使用瀏覽器的默認(rèn)實(shí)例速度更快。
創(chuàng)建靜態(tài)快捷方式
靜態(tài)快捷方式提供指向應(yīng)用內(nèi)常規(guī)操作的鏈接,這些操作在應(yīng)用當(dāng)前版本的生命周期內(nèi)應(yīng)保持一致。適合使用靜態(tài)快捷方式的操作包括查看已發(fā)郵件、設(shè)置鬧鐘以及顯示用戶當(dāng)天的鍛煉活動(dòng)。
如需創(chuàng)建靜態(tài)快捷方式,請(qǐng)按順序完成以下步驟:
在應(yīng)用的清單文件 (AndroidManifest.xml) 中,找到 intent 過濾器設(shè)置為 android.intent.action.MAIN 操作和 android.intent.category.LAUNCHER 類別的 Activity。
向此 Activity 添加 元素,該元素引用了定義應(yīng)用快捷方式的資源文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application ... >
<activity android:name="Main">
<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>
</application>
</manifest>
創(chuàng)建新的資源文件:res/xml/shortcuts.xml。
在這個(gè)新的資源文件中,添加 根元素,其中包含 元素的列表。每個(gè) 元素都包含有關(guān)一個(gè)靜態(tài)快捷方式的信息,包括其圖標(biāo)、說明標(biāo)簽及其在應(yīng)用內(nèi)啟動(dòng)的 intent:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="compose"
android:enabled="true"
android:icon="@drawable/compose_icon"
android:shortcutShortLabel="@string/compose_shortcut_short_label1"
android:shortcutLongLabel="@string/compose_shortcut_long_label1"
android:shortcutDisabledMessage="@string/compose_disabled_message1">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapplication"
android:targetClass="com.example.myapplication.ComposeActivity" />
<!-- If your shortcut is associated with multiple intents, include them
here. The last intent in the list determines what the user sees when
they launch this shortcut. -->
<categories android:name="android.shortcut.conversation" />
<capability-binding android:key="actions.intent.CREATE_MESSAGE" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>
自定義屬性值
以下列表介紹了靜態(tài)快捷方式內(nèi)的不同屬性。 您必須為 android:shortcutId 和 android:shortcutShortLabel 提供值。其他所有的值均為可選。
android:shortcutId
這是一個(gè)字符串字面量,表示 ShortcutManager 對(duì)象對(duì)其執(zhí)行操作時(shí)的快捷方式。
注意:不能將此屬性的值設(shè)置為資源字符串(例如 @string/foo)。
android:shortcutShortLabel
這是用于簡(jiǎn)短說明快捷方式用途的詞組。請(qǐng)盡可能將快捷方式的“簡(jiǎn)短說明”的長(zhǎng)度限制在 10 個(gè)字符以內(nèi)。
如需了解詳情,請(qǐng)參閱 setShortLabel()。
注意:此屬性的值必須為資源字符串,例如 @string/shortcut_short_label。
android:shortcutLongLabel
這是用于詳細(xì)說明快捷方式用途的詞組。如果空間足夠大,啟動(dòng)器會(huì)顯示此值,而不是 android:shortcutShortLabel。 請(qǐng)盡可能將快捷方式的“詳細(xì)說明”的長(zhǎng)度限制在 25 個(gè)字符以內(nèi)。
如需了解詳情,請(qǐng)參閱 setLongLabel()。
注意:此屬性的值必須為資源字符串,例如 @string/shortcut_long_label。
android:shortcutDisabledMessage
這是當(dāng)用戶嘗試啟動(dòng)已停用的快捷方式時(shí)出現(xiàn)在支持的啟動(dòng)器中的消息。此消息應(yīng)向用戶解釋快捷方式現(xiàn)在停用的原因。 如果 android:enabled 為 true,則此屬性的值無效。
注意:此屬性的值必須為資源字符串,例如 @string/shortcut_disabled_message。
android:enabled
這用于確定用戶是否能夠與支持的啟動(dòng)器中的快捷方式進(jìn)行交互。 android:enabled 的默認(rèn)值為 true。 如果您將其設(shè)置為 false,則還應(yīng)設(shè)置 android:shortcutDisabledMessage,用于說明停用該快捷方式的原因。如果您認(rèn)為自己不需要提供此類消息,最簡(jiǎn)單的做法就是從 XML 文件中完全移除該快捷方式。
android:icon
這是啟動(dòng)器向用戶顯示快捷方式時(shí)所用的位圖或自適應(yīng)圖標(biāo)。此值可以是某個(gè)圖片的路徑,也可以是包含相應(yīng)圖片的資源文件。請(qǐng)盡可能使用自適應(yīng)圖標(biāo)來提高性能和一致性。
注意:快捷方式圖標(biāo)不能包含色調(diào)。
配置內(nèi)部元素
列出應(yīng)用靜態(tài)快捷方式的 XML 文件支持每個(gè) 元素內(nèi)的以下元素。您必須為您定義的每個(gè)靜態(tài)快捷方式添加一個(gè) intent 內(nèi)部元素。
intent
這是系統(tǒng)在用戶選擇快捷方式時(shí)啟動(dòng)的操作。此 intent 必須為 android:action 屬性提供一個(gè)值。
注意:這個(gè) intent 元素不能包含字符串資源。
您可以為一個(gè)快捷方式提供多個(gè) intent。如需了解詳情,請(qǐng)參閱管理多個(gè) intent 和 Activity、設(shè)置 intent 和 TaskStackBuilder 類參考文檔。
categories
這用于為應(yīng)用的快捷方式所執(zhí)行的各類操作(如創(chuàng)建新的聊天消息)提供分組。
如需查看支持的快捷方式類別的列表,請(qǐng)參閱 ShortcutInfo 類參考文檔。
capability-binding
聲明與此快捷方式關(guān)聯(lián)的功能。
在此示例中,快捷方式關(guān)聯(lián)到一項(xiàng)為 CREATE_MESSAGE 聲明的功能,該對(duì)象是與應(yīng)用有關(guān)的 Action 內(nèi)置 intent。這種獨(dú)特的功能綁定使得用戶可以結(jié)合使用語音指令與 Google 助理來調(diào)用此快捷方式。
創(chuàng)建動(dòng)態(tài)快捷方式
動(dòng)態(tài)快捷方式提供指向應(yīng)用內(nèi)特定的上下文相關(guān)操作的鏈接。這些操作可能會(huì)在應(yīng)用的不同使用場(chǎng)景間發(fā)生變化,甚至?xí)趹?yīng)用運(yùn)行時(shí)發(fā)生變化。適合使用動(dòng)態(tài)快捷方式的用例包括致電特定人員、導(dǎo)航到特定位置,以及從用戶的上一個(gè)存檔點(diǎn)加載游戲。您也可以使用動(dòng)態(tài)快捷方式打開一個(gè)對(duì)話。
ShortcutManagerCompat Jetpack 庫(kù)是 ShortcutManager API 的幫助程序,可讓您管理應(yīng)用中的動(dòng)態(tài)快捷方式。使用 ShortcutManagerCompat 庫(kù)可減少樣板代碼,并確保各個(gè) Android 版本的快捷方式保持一致。推送動(dòng)態(tài)快捷方式也需要此庫(kù),以使這些快捷方式可以通過 Google 快捷方式集成庫(kù)顯示在 Google Surface(如 Google 助理)上。
ShorcutManagerCompat API 讓您的應(yīng)用可以通過動(dòng)態(tài)快捷方式執(zhí)行以下操作:
推送和更新:使用 pushDynamicShortcut() 發(fā)布和更新動(dòng)態(tài)快捷方式。如果已經(jīng)存在具有相同 ID 的動(dòng)態(tài)快捷方式或固定快捷方式,那么每個(gè)可變快捷方式都會(huì)更新。
移除:使用 removeDynamicShortcuts() 移除一組動(dòng)態(tài)快捷方式,或使用 removeAllDynamicShortcuts() 移除所有動(dòng)態(tài)快捷方式。
如需詳細(xì)了解如何對(duì)快捷方式執(zhí)行操作,請(qǐng)參閱管理快捷方式和 ShortcutManagerCompat 參考文檔。
以下示例代碼段展示了如何創(chuàng)建動(dòng)態(tài)快捷方式并將其與您的應(yīng)用相關(guān)聯(lián):
ShortcutInfo shortcut = new ShortcutInfoCompat.Builder(context, "id1")
.setShortLabel("Website")
.setLongLabel("Open the website")
.setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
.setIntent(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://www.mysite.example.com/")))
.build();
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut);
添加 Google 快捷方式集成庫(kù)
Google 快捷方式集成庫(kù)是一個(gè)可選的 Jetpack 庫(kù)。借助這個(gè)庫(kù),您可以推送可在 Android Surface(如啟動(dòng)器)和 Google Surface(如 Google 助理)上顯示的動(dòng)態(tài)快捷方式,您的用戶可以輕松發(fā)現(xiàn)您的快捷方式,以便快速訪問應(yīng)用中的特定內(nèi)容或重放操作。例如,即時(shí)通訊應(yīng)用可能會(huì)在用戶發(fā)消息給“Alex”后推送該聯(lián)系人的動(dòng)態(tài)快捷方式。推送該動(dòng)態(tài)快捷方式后,如果用戶向 Google 助理發(fā)出指令“Ok Google, 通過 ExampleApp 給 Alex 發(fā)消息”,Google 助理就會(huì)啟動(dòng) ExampleApp 并自動(dòng)將其配置為給 Alex 發(fā)送消息。
通過此庫(kù)推送的動(dòng)態(tài)快捷方式不受對(duì)每臺(tái)設(shè)備強(qiáng)制實(shí)施的快捷方式限制的約束,這使得您的應(yīng)用可以在用戶每次在您的應(yīng)用中完成關(guān)聯(lián)操作時(shí)推送一個(gè)快捷方式。以這種方式推送常用快捷方式,Google 就可以了解您用戶的使用方式,并根據(jù)情境向他們推薦相關(guān)的快捷方式。例如,Google 助理可以從健身跟蹤應(yīng)用推送的快捷方式中了解到,用戶通常每天早上都會(huì)去跑步,當(dāng)用戶早上拿起手機(jī)時(shí),會(huì)主動(dòng)推薦“開始跑步”快捷方式。
Google 快捷方式集成庫(kù)本身不提供任何可尋址功能。 將此庫(kù)添加到您的應(yīng)用后,Google Surface 便可以使用 ShortcutManagerCompat 提取您的應(yīng)用推送的快捷方式。
如需在您的應(yīng)用中使用此庫(kù),請(qǐng)按以下步驟操作:
更新 gradle.properties 文件以支持 AndroidX 庫(kù):
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
在 app/build.gradle 中,添加 Google 快捷方式集成庫(kù)和 ShortcutManagerCompat 的依賴項(xiàng):
dependencies {
implementation "androidx.core:core:1.6.0"
implementation 'androidx.core:core-google-shortcuts:1.0.0'
...
}
將庫(kù)依賴項(xiàng)添加到 Android 項(xiàng)目后,您的應(yīng)用就可以使用 ShortcutManagerCompat 的 pushDynamicShortcut() 方法推送可以在啟動(dòng)器和相關(guān) Google Surface 上顯示的動(dòng)態(tài)快捷方式。
注意:我們建議您使用 pushDynamicShortcut 通過 Google 快捷方式集成庫(kù)推送動(dòng)態(tài)快捷方式。您的應(yīng)用可以使用其他方法發(fā)布快捷方式,但如果達(dá)到最大快捷方式數(shù)限制,這些方法可能會(huì)失敗。
創(chuàng)建固定快捷方式
在 Android 8.0(API 級(jí)別 26)及更高版本中,您可以創(chuàng)建固定快捷方式。與靜態(tài)和動(dòng)態(tài)快捷方式不同,固定快捷方式在受支持的啟動(dòng)器中顯示為單獨(dú)的圖標(biāo)。圖 1 顯示了這兩類快捷方式之間的區(qū)別。
注意:當(dāng)您嘗試將快捷方式固定到受支持的啟動(dòng)器上時(shí),用戶會(huì)收到一個(gè)確認(rèn)對(duì)話框,詢問其是否允許固定該快捷方式。如果用戶不允許固定該快捷方式,啟動(dòng)器會(huì)取消這一請(qǐng)求。
對(duì)比應(yīng)用快捷方式與固定快捷方式的屏幕截圖
圖 1. 應(yīng)用快捷方式與固定快捷方式的外觀
要將快捷方式固定到使用您的應(yīng)用的受支持啟動(dòng)器上,請(qǐng)按順序完成以下一系列步驟:
使用 isRequestPinShortcutSupported() 驗(yàn)證設(shè)備的默認(rèn)啟動(dòng)器是否支持應(yīng)用內(nèi)固定快捷方式。
使用以下兩種方式之一創(chuàng)建 ShortcutInfo 對(duì)象,具體采用哪種方式取決于是否已存在相應(yīng)快捷方式:
如果已存在相應(yīng)快捷方式,請(qǐng)創(chuàng)建僅包含現(xiàn)有快捷方式 ID 的 ShortcutInfo 對(duì)象。系統(tǒng)會(huì)自動(dòng)找到與該快捷方式相關(guān)的所有其他信息,并將其固定。
如果您要固定原本不存在的新快捷方式,請(qǐng)創(chuàng)建包含新快捷方式 ID、intent 和簡(jiǎn)短標(biāo)簽的 ShortcutInfo 對(duì)象。
注意:由于系統(tǒng)會(huì)自動(dòng)對(duì)固定快捷方式執(zhí)行備份和恢復(fù)操作,因此這些快捷方式的 ID 應(yīng)包含穩(wěn)定的常量字符串或服務(wù)器端標(biāo)識(shí)符,而不是在本地生成的可能對(duì)其他設(shè)備毫無意義的標(biāo)識(shí)符。
嘗試通過調(diào)用 requestPinShortcut() 將快捷方式固定到設(shè)備的啟動(dòng)器上。在此過程中,您可以傳入一個(gè) PendingIntent 對(duì)象,用于僅在快捷方式成功固定后通知您的應(yīng)用。
注意:如果用戶不允許將快捷方式固定到啟動(dòng)器上,您的應(yīng)用就不會(huì)收到回調(diào)。
快捷方式固定后,您的應(yīng)用可以使用 updateShortcuts() 方法更新其內(nèi)容。如需了解詳情,請(qǐng)參閱更新快捷方式。
以下代碼段演示了如何創(chuàng)建固定快捷方式:
注意:ShortcutManager 類的實(shí)例必須使用帶有參數(shù) ShortcutManager.class 的 Context.getSystemService(Class) 或帶有參數(shù) Context.SHORTCUT_SERVICE 的 Context.getSystemService(String) 來獲取。
ShortcutManager shortcutManager =
context.getSystemService(ShortcutManager.class);
if (shortcutManager.isRequestPinShortcutSupported()) {
// Assumes there's already a shortcut with the ID "my-shortcut".
// The shortcut must be enabled.
ShortcutInfo pinShortcutInfo =
new ShortcutInfo.Builder(context, "my-shortcut").build();
// Create the PendingIntent object only if your app needs to be notified
// that the user allowed the shortcut to be pinned. Note that, if the
// pinning operation fails, your app isn't notified. We assume here that the
// app has implemented a method called createShortcutResultIntent() that
// returns a broadcast intent.
Intent pinnedShortcutCallbackIntent =
shortcutManager.createShortcutResultIntent(pinShortcutInfo);
// Configure the intent so that your app's broadcast receiver gets
// the callback successfully.For details, see PendingIntent.getBroadcast().
PendingIntent successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
pinnedShortcutCallbackIntent, /* flags */ 0);
shortcutManager.requestPinShortcut(pinShortcutInfo,
successCallback.getIntentSender());
}
注意:另請(qǐng)參閱支持庫(kù) API、 isRequestPinShortcutSupported() 和 requestPinShortcut(),它們適用于 Android 7.1(API 級(jí)別 25)及更低版本。支持庫(kù)會(huì)回退至已棄用的 EXTRA_SHORTCUT_INTENT extra 以嘗試固定流程。
創(chuàng)建自定義快捷方式 Activity
該自定義對(duì)話框 Activity 顯示了提示“要將 Gmail 啟動(dòng)器圖標(biāo)添加到主屏幕嗎?”。相應(yīng)自定義選項(xiàng)為“不用了”和“添加圖標(biāo)”。
圖 2. 一個(gè)自定義應(yīng)用快捷方式對(duì)話框 Activity 示例
您還可以創(chuàng)建一個(gè)專用 Activity 來幫助用戶創(chuàng)建快捷方式,同時(shí)提供自定義選項(xiàng)和確認(rèn)按鈕。圖 2 顯示了 Gmail 應(yīng)用中此類 Activity 的一個(gè)示例。
在應(yīng)用的清單文件中,將 ACTION_CREATE_SHORTCUT 添加到 Activity 的 <intent-filter>
元素中。當(dāng)用戶嘗試創(chuàng)建快捷方式時(shí),此聲明會(huì)設(shè)置以下行為:
系統(tǒng)啟動(dòng)應(yīng)用的專用 Activity。
用戶為快捷方式設(shè)置選項(xiàng)。
用戶選擇確認(rèn)按鈕。
應(yīng)用使用 createShortcutResultIntent() 方法創(chuàng)建快捷方式。此方法會(huì)返回 Intent,應(yīng)用會(huì)使用 setResult() 將其傳回給之前正在執(zhí)行的 Activity。
應(yīng)用對(duì)用于創(chuàng)建自定義快捷方式的 Activity 調(diào)用 finish()。
同樣,應(yīng)用可以在安裝后或首次啟動(dòng)時(shí)提示用戶將固定快捷方式添加到主屏幕。此方法非常有效,因?yàn)樗兄谟脩粼诔R?guī)工作流程中創(chuàng)建快捷方式。
測(cè)試快捷方式
要測(cè)試應(yīng)用的快捷方式,請(qǐng)?jiān)诰哂兄С挚旖莘绞降膯?dòng)器的設(shè)備上安裝應(yīng)用。然后,執(zhí)行下列操作:
長(zhǎng)按應(yīng)用的啟動(dòng)器圖標(biāo),以查看您為應(yīng)用定義的快捷方式。
點(diǎn)按并拖動(dòng)快捷方式,將其固定到設(shè)備的啟動(dòng)器上。文章來源:http://www.zghlxwxcb.cn/news/detail-401428.html
相關(guān)參考:
https://developer.android.com/guide/topics/ui/shortcuts文章來源地址http://www.zghlxwxcb.cn/news/detail-401428.html
到了這里,關(guān)于Android shortcuts快捷方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!