阅读 445

Android杂项-隐藏桌面App图标

摘要

本期内容:如何隐藏Android App在桌面上的Launcher图标,并且支持 隐式协议 启动App。

需求

在多App框架结构的交互中,我们会有一个主App对用户可见,而其他的子App只做安装,不对用户在桌面上显示启动图标。针对这样的场景下,就需要将App的图标隐藏起来了,并且又必需保证隐藏的App能够提供一个入口被启动。

实现方案

1. 常规开发中的入口Activity配置

有启动器的App,入口Activity的基础配置如下:

<activity     android:name=".MainActivity"     android:launchMode="singleTask">     <intent-filter>         <action android:name="android.intent.action.MAIN" />                  <category android:name="android.intent.category.LAUNCHER" />     </intent-filter> </activity> 复制代码

2. 隐藏App的桌面图标

<activity     android:name=".MainActivity"     android:launchMode="singleTask">     <intent-filter>         <action android:name="android.intent.action.MAIN" />         <!-- 为了隐藏桌面图标,要注意三个属性的配置顺序 -->         <!-- 这个data可以随意配置,最好是不会使用的host,目的就是为了隐藏launcher图标而已 -->         <data             android:host="hidelauncher.tyras.com"             android:scheme="tyras" />         <category android:name="android.intent.category.LAUNCHER" />     </intent-filter> </activity> 复制代码

3. 隐式启动配置

<activity     android:name=".MainActivity"     android:launchMode="singleTask">     <intent-filter>         <action android:name="android.intent.action.MAIN" />         <!-- 为了隐藏桌面图标,要注意三个属性的配置顺序 -->         <!-- 这个data可以随意配置,最好是不会使用的host,目的就是为了隐藏launcher图标而已 -->         <data             android:host="hidelauncher.tyras.com"             android:scheme="tyras" />         <category android:name="android.intent.category.LAUNCHER" />     </intent-filter>     <!-- 这个为了隐式打开,隐藏桌面图标与隐式协议分开配置,更清晰。 -->     <!-- DeepLink 协议,主协议,其它应用通用协议。 -->     <intent-filter>         <action android:name="android.intent.action.VIEW" />         <category android:name="android.intent.category.DEFAULT" />         <category android:name="android.intent.category.BROWSABLE" />         <data             android:host="test.tyras.com"             android:path="/main"             android:scheme="tyras" />     </intent-filter> </activity> 复制代码

4. 验证测试

按照上面3个步骤的配置,就可以实现App桌面图标的隐藏,并且又支持隐式协议启动App了。

这个方案,不仅在使用AS直接运行安装时能够正常启动,而且可以使用隐式协议 tyras://test.tryas.com/main 进行启动。

测试隐式协议可以使用 adb 命令进行启动测试。

adb shell am start -d "tyras://test.tryas.com/main" 复制代码

实现过程中的弯路

  1. 网络上找的一些博文中,都只说了一半,不够清晰,而且只说了一部分,隐式启动没有配置清楚,有问题;

  2. 在印象中,Android的早期系统,记得可以把 launcher 改为 default 就能实现的,测试时发现不对;

<category android:name="android.intent.category.LAUNCHER" /> 复制代码

改为

<category android:name="android.intent.category.DEFAULT" /> 复制代码

这个方案不行。

  1. 在常规的启动Activity的配置上,加上 data 的隐式协议时,不注意顺序,测试时发现, data 属性放在后面的情况下,桌面图标是隐藏不了的,因此,要注意3个属性的配置顺序;

  2. 虽然可以将2个 intent-filter 合并起来配置,但是全部的属性都不能少。而且不建议这样配置。

<activity     android:name=".MainActivity"     android:launchMode="singleTask">     <intent-filter>         <action android:name="android.intent.action.MAIN" />         <action android:name="android.intent.action.VIEW" />         <!-- 隐藏桌面图标,同时支持隐式协议启动,要注意属性的配置顺序 -->         <data             android:host="test.tyras.com"             android:path="/main"             android:scheme="tyras" />         <category android:name="android.intent.category.LAUNCHER" />         <category android:name="android.intent.category.DEFAULT" />         <category android:name="android.intent.category.BROWSABLE" />     </intent-filter> </activity> 复制代码

这样配置,也可以使用隐私协议 tyras://test.tryas.com/main 进行启动,但是要注意顺序以及所有的属性一个也不能少。

不建议使用这样的配置方式,因为不方便后期扩展与维护。


作者:磨剑十年
链接:https://juejin.cn/post/7028771610593067045


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐