当前位置: 首页>移动开发>正文

Android 13原生launcher新增卸载应用功能

文章目录

  • 前言
  • 一、涉及哪些文件
  • 二、涉及的方法和改动
    • 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.
            }
        }
    }

https://www.xamrdz.com/mobile/4jv1848626.html

相关文章: