0

我有一个activity可以检索所有像 Launcher 一样的应用程序AllAppsList(或者我应该准确地称它们为活动,因为一个应用程序可以有多个activities,比如谷歌地图)。这activity可以广播Intent为任何这些应用程序创建快捷方式。我的问题是关于创建的快捷方式。这是我的代码创建快捷方式:

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) ;
}

这可以成功地在主屏幕上创建快捷方式,但这些图标的大小几乎不正确。它们可能太小或太大。像这张图片..上面一行是我创建的 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)) ;
    }

这是从这里开始的,但这也不起作用。

希望有人能帮帮我:)

4

1 回答 1

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);

如果您的应用程序仅在 API 11 及更高版本上运行,则可以改用getLauncherLargeIconSize,但我没有使用太多,所以我只能说对于 Galaxy s3,两种方法都返回相同的值 (96)。

于 2013-04-07T21:11:31.133 回答