隐藏Icon有3种方式,在Manifest中注册Activity时改为隐式启动Icon不会显示,但不会动态显示
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- <data
android:host="MainActivity"
android:scheme="com.android.exmple" /> -->
</intent-filter>
第一种:隐式
<category android:name="android.intent.category.DEFAULT" />
也可以去掉Launch 但程序没有入口不能正常启动
第二种:也可以用代码方式隐藏
PackageManager p1 = getPackageManager();
p1.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
一样隐藏后程序就没法启动
第三种:在intent-file中设置data属性,这种貌似可以条件启动,但是一直没研究出来

最后解决方案:
设置两个主acitivy一个为程序外壳,一个为主要activity
Manifest配置:
<activity
android:name="com.foo.testapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.foo.testapp.TestActivity"
android:icon="@drawable/ic_launcher"
android:label="App" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
主要activity,<category>属性设为隐式即DEFAULT,外壳activity设为程序入口
外壳activity启动后跳到主要的acitivy
PackageManager p1 = getPackageManager();
p1.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
主acitivy中条件判断Icon是否隐藏了
显示Icon:
PackageManager p1 = getPackageManager();
p1.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
隐藏Icon:
PackageManager p1 = getPackageManager();
p1.setComponentEnabledSetting(getComponentName(),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);