栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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的启动源码分析)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号