那么如何创建其他应用的快捷方式呢?以及如何显示快捷方式(shortcut)的图标呢?比如像settings中的应用程序列表一样,点击程序后,自动创建一个shortcut。
正好本人在之前的项目中实现过这方面的需求,现将代码段发布出来,和大家共享。
private void makeShortcut() {
String SHORTCUT_INSTALL = "com.android.launcher.action.INSTALL_SHORTCUT";
String packageName = applicationInfo.packageName;
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageName);
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(resolveIntent, PackageManager.GET_ACTIVITIES);
if(apps.size() == 0) {
Toast.makeText(this, "无法创建快捷方式", Toast.LENGTH_SHORT).show();
return;
}
ResolveInfo ri = apps.get(0);
if (ri != null) {
Intent shortcut = new Intent(SHORTCUT_INSTALL);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, applicationInfo.loadLabel(getPackageManager()));
shortcut.putExtra("duplicate", false);// 不允许重复创建
String className = ri.activityInfo.name;
ComponentName cn = new ComponentName(packageName,className.replace(packageName, ""));
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(cn));
// 显示的图标
Drawable iconDrawable = applicationInfo.loadIcon(getPackageManager());
BitmapDrawable iconBitmapDrawable = (BitmapDrawable) iconDrawable;
Bitmap iconBitmap = iconBitmapDrawable.getBitmap();
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconBitmap);
// 发送广播用以创建shortcut
this.sendBroadcast(shortcut);
}
}
以上方法即为创建shortcut的方法,并且能够成功将shortcut的图标与应用图标相关联。
其中applicationInfo变量即为ApplicationInfo的实例,该实例可通过以下方法获取。
可以理解为当点击列表中某一项后,该ApplicationInfo对象将自动载入。
private ApplicationInfo applicationInfo;
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
applicationInfo = packageInfos.get(position).applicationInfo;
boolean flag = false;
if((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
// Updated system app
flag = true;
} else if((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
// Non-system app
flag = true;
}
if(flag) {
Log.e("sky", "is not system app");
}
}
以上为核心代码片段,请各位根据自己的需要进行增删,谢谢大家的支持。