Android学习:设置 Scheme 导致 App 图标隐藏


公司做的 Android App 需要支持浏览器通过 URL 来启动,很草率的设置了以下的代码:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <!-- add start -->
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="vrainer" android:host="password_reset"/>
    <!-- add end -->
</intent-filter>

结果偶然发现,安装以后桌面上找不到图标了,但是手机上确确实实安装了这个应用。后来百度查询资料,需要将不用的 intent filter 分开设置,改成下面的代码就 OK。

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="vrainer" android:host="password_reset"/>
</intent-filter>

大概的原因是这样的,因为intent-filter表示activity接受怎样的intent,定义在一个intent-filter中的条件必须都满足才能按照该intent-filter启动,否则按照其他intent-filter启动。而以上明显是两类启动方式,所以必须分开。通过这个介绍可以知道其他的action、category、data冲突也有可能导致这个问题。

但是这样为什么会影响图标,暂时不得而知,后续调查会进行补充。


版权声明

本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。