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.
            }
        }
    }

总结

本文主要给原生launcher新增了长按应用图标拥有卸载的功能,并且规避掉一些场景不应该显示卸载功能,比如系统应用、应用分身等不应该有卸载功能,以上,有帮助到读者我很开心!

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值