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

Posted Android高级知识分享官

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的启动源码分析)

以上是关于android framework项目开发案例-动态隐藏Launcher上图标的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

Android Framework实战开发-binder通信常见使用方式,及案例分析

Android Framework实战开发-binder通信常见使用方式,及案例分析

千里马Android Framework实战开发-native程序之间binder通信实战案例分析