著名的工具軟體Clean Master有一項遊戲加速的功能, 它會放一個捷徑在桌面上, 而它的長得就像是跟資料夾一樣:
之前沒仔細去看它, 一直以為它是個小工具(AppWidget), 但其實它只是個捷徑而已, 點選它會跳出一個透明背景的對話窗, 所以很容易誤以為是桌面上的資料夾(如圖右)
這用了個小技巧, 雖然有點唬人, 但其實不難, 以下就如法炮製一個類似的吧!
在這實驗, 就把Youtube, Google plus, Google map三個app的圖示放一起, 邊框, 麻煩就先省略
Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); | |
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "test"); | |
PackageManager pm = getPackageManager(); | |
ApplicationInfo youtube = null; | |
ApplicationInfo plus = null; | |
ApplicationInfo map = null; | |
try { | |
youtube = pm.getApplicationInfo("com.google.android.youtube", PackageScanIntentService.FLAGS_PACKAGE); | |
plus = pm.getApplicationInfo("com.google.android.apps.plus", PackageScanIntentService.FLAGS_PACKAGE); | |
map = pm.getApplicationInfo("com.google.android.apps.maps", PackageScanIntentService.FLAGS_PACKAGE); | |
BitmapFactory.Options options = new BitmapFactory.Options(); | |
options.inSampleSize = 2; | |
Bitmap youtubeIcon = BitmapFactory.decodeResource(pm.getResourcesForApplication(youtube), youtube.icon, options); | |
Bitmap plusIcon = BitmapFactory.decodeResource(pm.getResourcesForApplication(plus), plus.icon, options); | |
Bitmap mapIcon = BitmapFactory.decodeResource(pm.getResourcesForApplication(map), map.icon, options); | |
Bitmap icon = Bitmap.createBitmap(youtubeIcon.getWidth() * 2, youtubeIcon.getHeight() * 2, Bitmap.Config.ARGB_8888); | |
Canvas c = new Canvas(icon); | |
c.drawBitmap(youtubeIcon, 0, 0, null); | |
c.drawBitmap(plusIcon, plusIcon.getWidth(), 0, null); | |
c.drawBitmap(mapIcon, 0, mapIcon.getHeight(), null); | |
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon); | |
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, actionIntent); | |
intent.putExtra("duplicate", false); | |
sendBroadcast(intent); | |
} catch (PackageManager.NameNotFoundException e) { | |
e.printStackTrace(); | |
} |
利用"com.android.launcher.action.INSTALL_SHORTCUT"這個Intent可以在桌面上創建捷徑, 應該幾乎所有的桌面軟體都有支援, 關鍵點在於這Intent裡會帶的Intent.EXTRA_SHORTCUT_ICON, 這可以帶一個Bitmap來當作這個捷徑的圖示, 沒意外的, 就是從這邊動手
因為我們需要把四個圖示畫到一個上面, 所以每個圖示變成原本的1/4, 因此, 在用BitmapFactory.decodeResource載入圖示時, 可以把sample size設成2(也就是1/4大小), 這樣可以減少一些記憶體的使用, 取得了圖示後就可以把它們畫到另一個新的Bitmap了
要注意的是, 要用INSTALL_SHORTCUT的話, 要在AndroidManifest.xml裡加上:
<uses-permission android:name=“com.android.launcher.permission.INSTALL_SHORTCUT” />
這方法的缺點是, 一旦捷徑被創建好後, 就沒機會改它的圖示了