如何正确引用其他应用程序的图标文件以创建主屏幕快捷方式

时间:2017-10-23 00:36:47

标签: java android shortcut

我正在进行app-drawer更换,但是我无法让用户能够创建主屏幕图标。

我可以创建快捷方式,但我很难从相应的应用中提取图标。

我使用以下方式收集有关应用的信息:

    manager = getPackageManager();
    apps = new ArrayList<AppDetail>();

    Intent i = new Intent(Intent.ACTION_MAIN, null);
    i.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> availableActivities = manager.queryIntentActivities(i,0);

    Collections.sort(availableActivities, new ResolveInfo.DisplayNameComparator(manager));

    for(ResolveInfo ri:availableActivities){
        AppDetail app = new AppDetail();

        app.name = ri.activityInfo.packageName;

        app.label = ri.loadLabel(manager);
        app.icon = ri.activityInfo.loadIcon(manager);
        app.iconID = ri.getIconResource();
        apps.add(app);

但是当我尝试创建快捷方式时,我遇到了麻烦

        AppDetail selectedApp = apps.get(info.position);

...

        Intent shortcutIntent = new Intent(this, selectedApp.getClass());
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        final Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, selectedApp.label);

        // the danger zone
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(getBaseContext(),selectedApp.iconID));

        intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

        sendBroadcast(intent);
        finish();

如何正确引用其他应用的图标文件?

1 个答案:

答案 0 :(得分:0)

请使用

Drawable icon = manager.getApplicationIcon(app.name);

获取图标图形,

final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, selectedApp.label);

// this line in your code changed
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon.getBitmap());

intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(intent);