如何正确引用另一个应用程序的图标文件来创建主屏幕快捷方式
How can I correctly reference the icon file of another app to create a homescreen shortcut
我正在开发应用程序抽屉的替代品,但我无法让用户创建主屏幕图标。
我可以创建快捷方式,但我很难从相应的应用程序中提取图标。
我使用以下方式收集有关应用程序的信息:
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();
如何正确引用其他应用的图标文件?
请使用
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);
我正在开发应用程序抽屉的替代品,但我无法让用户创建主屏幕图标。
我可以创建快捷方式,但我很难从相应的应用程序中提取图标。
我使用以下方式收集有关应用程序的信息:
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();
如何正确引用其他应用的图标文件?
请使用
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);