2013-01-25 52 views
0

我有一個activity,可以檢索所有應用程序,就像啓動AllAppsList(或者我應該叫他們的活動準確地說,因爲一個應用程序可以有多個activities,如谷歌地圖) 。而這個activity可以廣播一個Intent爲這些應用程序創建快捷方式。而我的問題是關於創建的快捷方式。這裏是我的代碼中創建快捷方式:在Android傑利貝恩創建其他應用程序,但錯誤的大小圖標快捷方式

public static void addShortcut(Context c, ActivityInfo actInfo){ 
    PackageManager pm = c.getPackageManager() ; 
    String packageName = actInfo.packageName ; 
    String className = actInfo.name ; 
    CharSequence label = actInfo.loadLabel(pm) ; 

    // Create an Intent to launch the application 
    Intent shortcutIntent = new Intent (Intent.ACTION_MAIN) ; 
    shortcutIntent.setComponent(new ComponentName(packageName, className)) ; 
    shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP) ; 
    // Create an Intent to notify Launcher to create a shortcut on home screen 
    Intent addIntent = new Intent() ; 
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent) ; 
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, label) ; 
    // Put in the shortcut's icon 
    Log.i(TAG, "use actInfo.loadIcon(pm)") ; 
    Drawable drawable = actInfo.loadIcon(pm) ; 
    Bitmap b = ((BitmapDrawable)drawable).getBitmap() ; 
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, b) ; 

    // Broadcast the Intent 
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); 
    c.sendBroadcast(addIntent) ; 
} 

這可以成功地創建主屏幕上的快捷方式,但這些圖標大小几乎是不正確的。它們可能太小或太大。 Like this image..上排是我創建的2個快捷方式。下面的2個快捷方式從Launcher的AllAppsView中拖出來,這是正常的。顯然我的更小...

我試過的第一件事是調整圖標大小。但是如果我這樣做,創建的圖標就不會像從Launcher的AllAppsView中拖出的圖標一樣完美。換句話說,他們變得模糊。

另一次嘗試,是這樣的代碼:

if (actInfo.icon != 0){ 
     Log.i(TAG, "use actInfo.icon") ; 
     addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
       Intent.ShortcutIconResource.fromContext(c, actInfo.icon)) ; 
    } 
    else if (actInfo.applicationInfo.icon != 0){ 
     Log.i(TAG, "use actInfo.applicationInfo.icon") ; 
     addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, 
       Intent.ShortcutIconResource.fromContext(c, actInfo.applicationInfo.icon)) ; 
    } 

which is from here,但是這也不能正常工作。

希望有人能夠給我一個手:)

+0

@Avadhani感謝您改善格式:) –

回答

0

什麼,我認爲你應該做的是:

final int appIconSize=(int)(getResources().getDisplayMetrics().density*48); 
final Bitmap temp; 
if(shortcutIconBitmap.getWidth()==appIconSize&&shortcutIconBitmap.getHeight()==appIconSize) 
    temp=shortcutIconBitmap; 
else temp=Bitmap.createScaledBitmap(shortcutIconBitmap,appIconSize,appIconSize,true); 
putShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON,temp); 

,如果你有11 API及以上的只有應用程序運行時,可以使用getLauncherLargeIconSize代替,但我沒有用太多,所以我只能說對於s3星系,兩種方法都返回相同的值(96)。

相關問題