android framework项目开发案例-动态隐藏Launcher上图标

107 篇文章 23 订阅
72 篇文章 0 订阅

hi,粉丝朋友们大家好!今天开始我们来开发一个android手机上如何动态隐藏桌面图标案例!
项目背景:
手机上桌面图标有时候不想被其他人发现,我们安装了某些应用,比如陌陌,xxx交友,和平精英等等
具体实现方案讨论:
方案1:在桌面launcher上面进行对应图标隐藏既可以
缺点:只能隐藏桌面图标,但是一些应用中心等也一样有入口,所以不彻底
方案2:在桌面launcher隐藏,而且framework层面实现拦截跳转,如framework在startActivity地方进行拦截
缺点:这里可能会让第三方应用一样可以看到应用,但是点击了没有反应,而且需要修改framework相对成本较大
方案3:android本身有一个系统级别api,setComponentEnabledSetting,这接口直接让app的Launcher图标组件直接为disable状态,直接Launcher,应用中心等无法获取应用入口,而且应用入口即使被写死componentName也无法通过startActivity启动
优点:先比前2个方案隐藏彻底性最好,而且系统级别应用既可以实现,不需要framework参与,减少耦合,一般框架framework修改的原则都是尽量可以简单在应用实现的就在应用实现

在这里插入图片描述
实现过程及demo源码
这里需要分2个大步骤实现:
1、获取要隐藏的app入口的ComponentName,然后再调用setComponentEnabledSetting方法,这里我们demo,暂时写死一个固定ComponentName,项目中大家可以通过PackageManager获取所有的Launcher 图标,然后再做一个listview显示开关,这里demo实现核心代码如下:

        binding.fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PackageManager packageManager = getPackageManager();
                if (enableState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
                    enableState =PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
                } else {
                    enableState =PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
                }
                packageManager.setComponentEnabledSetting(new ComponentName("com.panzq.applicationb","com.panzq.applicationb.TcpMainActivity"),
                        enableState,
                        PackageManager.DONT_KILL_APP);

                Snackbar.make(view, "Replace with your own action enableState = " + enableState, Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

代码很简单,基本一看就懂就不多解释,就一个核心方法setComponentEnabledSetting
大家到这里是不是以为就完了啊?哈哈当然没有啦,以为普通第三方应用其实并没有调用setComponentEnabledSetting的权限,所以要在AndroidManifest声明对应权限
在这里插入图片描述
但是大家发现这里编译器是有提示错误的,说这里是系统级别权限,所以第三方app运行起来是一定会崩溃报错的哦,那接下来就是要解决这个报错权限问题,那么请看下一篇blog吧。

课程答疑和新课信息:QQ交流群:422901085进行课程讨论,加群主qq享受 优惠
FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298
FrameWork实战课1视频链接:https://edu.csdn.net/course/detail/30275
FrameWork跨进程通信视频链接:https://edu.csdn.net/course/detail/35911
专题博客系列:
Android 8.1 zygote 启动过程源码
Android Framework实战视频–Zygote的fork进程篇
Android Framework实战视频–SystemServer启动篇
Android Framework实战视频–SystemServer启动FallbackHome篇
Android Framework实战视频–FallbackHome进程启动及Activity启动篇
Android Framework实战视频–FallbackHome结束启动Launcher篇
Android Framework实战视频–BootAnimation的启动源码分析(Android8.1)

Android Framework实战视频–init进程的bootanimation启动源码分析(补充Android 10部分的BootAnimation的启动源码分析)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值