Android - 快捷方式

dean_mh發表於2020-10-23

簡介

幫助使用者快速啟動應用程式中的常見或推薦功能

建立方式

  1. 靜態快捷方式:在打包到APK或應用包中的資原始檔中定義。適合在使用者與應用程式互動的整個生命週期內使用一致結構連結到內容的應用程式,即固定功能,固定跳轉的頁面。
  2. 動態快捷方式:只能在執行時由應用釋出,更新和刪除(靜態和動態加在一起最多四個,因為大多數啟動器只能顯示四個)。用於上下文相關的應用程式中的操作,快捷方式將需要經常更新。
  3. 固定快捷方式:如果使用者授予許可,則可以在執行時將固定的快捷方式新增到受支援的啟動器中(無數量限制)。該方式生成的快捷方式內容一般由使用者驅動,比如瀏覽器生成特定網頁的快捷方式、遙控器生成特定裝置的快捷方式。

使用

  • 靜態快捷方式
  1. 在res下新建xml資料夾,然後新建檔案作為靜態快捷方式配置檔案,這邊新建的檔名叫shortcuts.xml,填寫快捷方式相關配置
<?xml version="1.0" encoding="utf-8"?>
<!--根標籤是shortcuts代表一堆快捷方式-->
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <!--每個shortcut標籤代表一個快捷方式-->
  <shortcut
	<!--必須值:ID值,後面動態時可通過這個ID控制該快捷方式的顯示或隱藏,不可以使用String資原始檔裡面的值引入-->
    android:shortcutId="play"
	
	<!--必須值:顯示快捷方式後的簡短描述,長度不超過10個字元-->
    android:shortcutShortLabel="@string/play_shortcut_short_label"
	
	<!--可選值:擴充套件短語,有足夠空間才展示,長度不超過25個字元-->
    android:shortcutLongLabel="@string/play_shortcut_long_label"
	<!--可選值:預設true,如果設定為false,使用者點選該快捷方式時無效,這時最好配置shortcutDisabledMessage告訴使用者為什麼無效-->
    android:enabled="true"
	
	<!--可選值:當該快捷方式無效時提示文字,enabled為true不起作用--> 
	android:shortcutDisabledMessage="@string/play_disabled_message"
	
	<!--可選值:快捷方式的圖示-->
    android:icon="@drawable/video">
	<!--使用者點選該快捷方式發生的意圖-->
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.dean.smartApp"
      android:targetClass="com.dean.smartApp.MainActivity">
	  <!--通過intent意圖裡面配置extra來告訴MainActivity需要展示的fragment-->
	  <extra
			android:name="shortcut"
			android:value="play"/>
	</intent>
	<!--為應用程式的快捷方式執行的操作型別提供分組,例如建立新的聊天訊息-->
    <categories android:name="android.shortcut.conversation" />
  </shortcut>
  
  <shortcut
    android:shortcutId="music"
    android:enabled="true"
    android:icon="@drawable/music"
    android:shortcutShortLabel="@string/music_shortcut_short_label"
    android:shortcutLongLabel="@string/music_shortcut_long_label"
    android:shortcutDisabledMessage="@string/music_disabled_message">
    <intent
      android:action="android.intent.action.VIEW"
      android:targetPackage="com.dean.smartApp"
      android:targetClass="com.dean.smartApp.MainActivity">
	  <extra
			android:name="shortcut"
			android:value="music"/>
	</intent>
    <categories android:name="android.shortcut.conversation" />
  </shortcut>
</shortcuts>
  1. 在Manifest啟動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>
  • 動態快捷方式
    使用該方式可以引導使用者自定義快捷方式以快速開啟某個頁面
  1. 新建快捷方式,這邊方法和上面xml中差不多
ShortcutInfo shortcut = new ShortcutInfo.Builder(context, "play")
    .setShortLabel("高清影視")
    .setLongLabel("16K高清,不一樣的體驗")
    .setIcon(Icon.createWithResource(context, R.drawable.icon_shortcut_play))
    .setIntent(playIntent)
    .build();
  1. 更新快捷方式列表
//通過SystemService獲取Shortcut管理類
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
//通過setDynamicShortcuts替換原有整個快捷方式列表
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
//也可以通過addDynamicShortcuts來增加一些快捷方式
shortcutManager.addDynamicShortcuts(Arrays.asList(shortcut));
//也可以通過updateShortcuts來更新原有的快捷方式列表
shortcutManager.updateShortcuts(Arrays.asList(shortcut));
//移除所有快捷方式
shortcutManager.removeAllDynamicShortcuts();
//通過ID刪除指定的快捷方式
shortcutManager.removeDynamicShortcuts(shortcutIds);
  • 固定快捷方式
    Android 8.0(API級別26)及更高版本上支援
  1. 第一種:之前靜態和動態建立的快捷方式,在桌面長按應用圖示會顯示快捷方式列表,這時長按列表某一項然後拖動到桌面空白位置即可。
  2. 第二種:程式碼建立
//獲取ShortcutManager
ShortcutManager shortcutManager =
        context.getSystemService(ShortcutManager.class);
//通過isRequestPinShortcutSupported來判斷當前裝置是否支援固定快捷方式
if (shortcutManager.isRequestPinShortcutSupported()) {
    //拿到需要固定的快捷方式,可以是之前靜態或動態建立好的
    ShortcutInfo pinShortcutInfo =
            new ShortcutInfo.Builder(context, "play").build();

    //建立一個意圖
    Intent pinnedShortcutCallbackIntent =
            shortcutManager.createShortcutResultIntent(pinShortcutInfo);
	//和其他系統控制元件互動一樣需要延時意圖PendingIntent
    PendingIntent successCallback = PendingIntent.getBroadcast(context,0,pinnedShortcutCallbackIntent,0);
	//建立固定快捷方式
    shortcutManager.requestPinShortcut(pinShortcutInfo,successCallback.getIntentSender());
}

相關文章