文章目录
- 前言
- 一、涉及哪些文件
- 二、涉及的方法和改动
-
- 1.Launcher.java下的getSupportedShortcuts()方法
- 2.SystemShortcut.java下新增方法
- 总结
前言
原生launcher不像自研应用的内容如此丰富,原生只提供了一些比较常见的功能,没有其他一些多样化的功能
例如:长按应用图标,并没有找到卸载应用的功能,只能通过拖拽应用图标到顶部进行卸载,这对用户体验大大折损,那有没有方法加上长按应用图标拥有卸载功能,答案是肯定的,下面我就为大家进行实现。
提示:以下是本篇文章正文内容,下面案例可供参考
一、涉及哪些文件
主要涉及以下两个文件的改动:
/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
/packages/apps/Launcher3/src/com/android/launcher3/popup/SystemShortcut.java
二、涉及的方法和改动
1.Launcher.java下的getSupportedShortcuts()方法
代码如下(示例):
public Stream<SystemShortcut.Factory> getSupportedShortcuts() {
return Stream.of(APP_INFO, WIDGETS, INSTALL, UNINSTALL);
}
主要新增了UNINSTALL参数,这个参数刚新增会报错,因为这是自己自定义的方法,下面的文件用于定义该方法。
2.SystemShortcut.java下新增方法
代码如下(示例):
public static final Factory<BaseDraggingActivity> UNINSTALL = (activity, itemInfo, view) -> {
Log.e("TAG", "info:" + itemInfo.toString() + "," + itemInfo.getTargetComponent());
// 过滤应用信息为空情况
if (itemInfo.getTargetComponent() == null) {
return null;
}
// 过滤系统应用
if (PackageManagerHelper.isSystemApp(activity,
itemInfo.getIntent())) {
return null;
}
// 只有应用才显示卸载功能
if (!(itemInfo.itemType == 0)) {
return null;
}
// 过滤应用分身不显示移除功能
if (!Process.myUserHandle().equals(itemInfo.user)) {
return null;
}
return new UnInstall(activity, itemInfo, view);
};
public static class UnInstall extends SystemShortcut<BaseDraggingActivity> {
public UnInstall(BaseDraggingActivity target, ItemInfo itemInfo, View originalView) {
super(R.drawable.ic_uninstall_no_shadow, R.string.uninstall_drop_target_label,
target, itemInfo, originalView);
}
@Override
public void onClick(View view) {
try {
Log.e("TAG", "info:" + mItemInfo.toString());
Intent intent = Intent.parseUri(view.getContext().getString(R.string.delete_package_intent), 0)
.setData(Uri.fromParts("package", mItemInfo.getTargetComponent().getPackageName(),
mItemInfo.getTargetComponent().getClassName())).putExtra(Intent.EXTRA_USER, mItemInfo.user);
mTarget.startActivitySafely(view, intent, mItemInfo);
AbstractFloatingView.closeAllOpenViews(mTarget);
} catch (URISyntaxException e) {
// Do nothing.
}
}
}