嗨,各位粉丝们好! 从今天开始开发用安卓手机动态隐藏桌面图标的案例!
项目背景:
手机的桌面图标有时不想被别人发现。 我们安装了陌生人、xxx交友、和平精英等APP
具体方案讨论:
场景1 :在桌面launcher上隐藏对应图标即可
缺点:只能隐藏桌面图标,但由于一些APP应用中心等也有同样的入口,所以不够彻底
方案2 :用桌面launcher隐藏,在framework级别实现拦截跳转。 例如,framework在开始活动的地方拦截
缺点:在这里也许可以像第三方APP一样看到APP,但是点击也没有反应,需要修改framework的成本相对较大
场景3 :安卓本身有系统级的api、setComponentEnabledSetting,该接口直接将app的Launcher图标组件置于禁用状态,直接Launcher
优点:最好比前两种方案隐藏彻底性,且能实现系统级应用,无需框架参与,减少耦合。 一般框架框架修改的原则尽可能简单地通过应用实现,这一点在应用中得到了实现
流程和demo源代码实现
这里需要分两大步骤来实现。
1、获取要隐藏的app门户的ComponentName,然后调用setComponentEnabledSetting方法。 在这里我们写了demo,临时固定的ComponentName,在项目中大家可以通过PackageManager获取所有的Launcher图标
binding.fab.setonclicklistener (new view.onclick listener ({ @ overridepublicvoidonclick ) view ) package manager if abled _ state _ enabled (enablestate=package manager.com ponent _ ) component ) )。 } else { enablestate=package manager.com ponent _ enabled _ state _ enabled; } package manager.setcomponentenabledsetting (newcomponentname (com.panZQ.applicationb (,com.pan zq.application b ) ) ' replacewithyourownactionenablestate=' enablestate,Snackbar.LENGTH_LONG ).setaction ) aaction }; ); 代码很简单,基本上一看就知道,但不多解释。 关于一种核心方法setComponentEnabledSetting
大家都以为到了这个地步就结束了吗? 哈哈当然没有。 普通的第三方APP其实无权调用setComponentEnabledSetting,所以在AndroidManifest中声明对应权限
但是,在这里我发现编译器有一个提示错误。 因为这里是系统级权限,所以第三方app运行时一定会崩溃并报告错误哦。 那么,接下来是解决报告这个错误的权限问题。 那么,请看下面的博客。
课堂答疑和新课程信息: QQ交流群: 422901085进行课堂讨论,加hxdqbqq享受优惠
框架入门课视频链接: https://edu.csdn.net/course/detail/30298
FrameWork实战课1视频链接: https://edu.csdn.net/course/detail/30275
FrameWork交叉进程通信视频链接: https://edu.csdn.net/course/detail/35911
专题博客系列:
安卓8.1 zygote启动进程的源代码
安卓框架实战视频zygote的fork流程篇
安卓框架实战视频systemserver启动篇
安卓框架实战视频systemserver启动故障主页篇
安卓框架实战视频fallback home进程启动和Activity启动篇
安卓框架实战视频fallback home结束启动器篇
安卓框架实战视频boot animation启动源分析(安卓8.1 ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
安卓框架实战视频init流程引导动画启动源代码分析(补充安卓10的引导动画启动源代码分析) )。