Android ApiDemos示例解析(24):App->Launcher Shortcuts

Android 操作系統對於<intent-filter>含有下列屬性的Activity會在應用程序管理器(Launcher)顯示一項,一般這個Activity對應於某個應用的主Activity。
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
此外,如果用戶想在設備的Home Screen上添加應用的快捷方式,可以在Launcher中長按這個應用的圖標,Android系統會自動為該應用在Home Screen上添加一個快捷方式,名稱和圖標和在Launcher中的一樣。
除瞭支持指向應用(主Activity)的快捷方式外,Android可以在Home Screen上定義指向Application中任意Activity的快捷方式。
 

比如說你的應用中有個功能用戶可能會經常使用,比如說地圖中查詢地址,正常情況下用戶需要先啟動主Activity,可能需要經過幾次菜單選擇或是其它方式才能進到這個功能,用戶可能感覺到不方便,這是可以為這個功能在Home Screen建立一個快捷方式,用戶按這個快捷方式後會直接進入這個功能界面,即使這個Activity不是主Activity。
Launcher Shortcuts就是介紹瞭如何為某個非主Activity在Home Screen上建立一個快捷方式。
實現這個快捷方式,可以分下面幾步來完成:
1.為需要創建快捷方式的Activity的<intent-filter>添加<action android:name=”android.intent.action.CREATE_SHORTCUT” /> ,標識這個Activity可以支持在Home Screen上添加快捷方式。Launcher Shortcuts 是采用的是activity-alias,activity-alias為Target的別名,類似於Activity.
2.添加相應用戶添加快捷方式的代碼,一般在Activity的onCreate方法中為Activity安裝快捷方式:
[java] 
1. if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) 
2. { 
3.  setupShortcut(); 
4.  finish(); 
5.  return; 
6. } 
7.   
8. … 
9. private void setupShortcut() { 
10.  // First, set up the shortcut intent.  
11.  //For this example, we simply create an intent that  
12.  // will bring us directly back to this activity.  
13.  //A more typical implementation would use a  
14.  // data Uri in order to display a more specific result,  
15.  //or a custom action in order to  
16.  // launch a specific operation.  
17.   
18.  Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); 
19.  shortcutIntent.setClassName(this, this.getClass().getName()); 
20.  shortcutIntent.putExtra(EXTRA_KEY, "ApiDemos Provided This Shortcut"); 
21.   
22.  // Then, set up the container intent (the response to the caller)  
23.   
24.  Intent intent = new Intent(); 
25.  intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
26.  intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.shortcut_name)); 
27.  Parcelable iconResource = Intent.ShortcutIconResource.fromContext( 
28.  this,  R.drawable.app_sample_code); 
29.  intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); 
30.   
31.  // Now, return the result to the launcher  
32.   
33.  setResult(RESULT_OK, intent); 
34. } 
 

 
如果用戶想為某個Activity創建快捷方式,方法是在Home Screen的空白處長按,這時Android會顯示用戶可以選擇添加的桌面種類列表,選擇Shortcut(快捷方式)後,Android會列出所有定義瞭android.intent.action.CREATE_SHORTCUT的所有應用:

 
此時如果選擇ApiDemos,那麼Add to Home Screen會啟動LauncherShortcuts Activity,發出請求的Intent的action 會設置為Intent.ACTION_CREATE_SHORTCUT,因此可以在onCreate中使用Intent.ACTION_CREATE_SHORTCUT.equals(action)來判斷請求是來自Add to Home Screen還是用戶選擇App->Launcher Shorts。如果是來自Add to Home Screen,Launcher Shortcuts則為本Activity創建一個快捷方式setupShortcut,然後退出。
Add to Home Screen 發出Intent請其後(運行startActivityForResult),預期從LauncherShortcuts返回一個結果,這也是為什麼setupShortcut需要返回一個結果。對應創建的快捷方式的Intent至少需要定義三個參數:SHORTCUT_INTENT (value: Intent), SHORTCUT_NAME (value: String),  SHORTCUT_ICON (value: Bitmap)或SHORTCUT_ICON_RESOURCE (value: ShortcutIconResource).
本例是為當前Activity(LauncherShortcuts)創建快捷方式,實際應用中可以根據需要為別的Activity或是提供一個列表供用戶來選擇需創建的快捷方式。
本例在Home Screen創建一個Sample 快捷方式,選擇該快捷方式後,直接進入Launcher Shortcuts,而無需從App再進入Launcher Shortcuts
 
作者:mapdigit
 
 

發佈留言