<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity android:name=".Main2Activity">
<intent-filter>
<action android:name="android.intent.action.SECOND" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity-alias
android:name="exActivity"
android:targetActivity=".Main2Activity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity-alias>
</application>
注意:以上代码中MainActivity中没有设置category android:name="android.intent.category.LAUNCHER,也就是说这个应用是没有桌面启动图标的。
但是如果其他应用想通过getLaunchIntentForPackage启动这个应用怎么办?
这时候activity-alias就派上用场了,这个就是给一个activity设置一个别名,它需要有一个android:targetActivity属性,来标识目标activity。
再加上一个,这个category可以用看源码中的定义解释,就是当没有launcher时使用的,可以作为一个其他应用的入口。
/**
* Provides information about the package it is in; typically used if
* a package does not contain a {@link #CATEGORY_LAUNCHER} to provide
* a front-door to the user without having to be shown in the all apps list.
*/
所以其他应用就可以通过getLaunchIntentForPackage来获取到目标应用的intent,然后直接跳转到Main2Activity。