轉自http://blog.csdn.net/jdsjlzx/article/details/22077371
如果你的應用需要隱藏圖標,那么這篇文章接下來的段落對你可能有所幫助。
在找到本文之前,你也許已經嘗試過諸如以下的解決方案:
1,AndroidManifest.xml文件中在入口Activity的intent-filter里去掉<category Android:name=”android.intent.category.LAUNCHER” />,或者將LAUNCHER改為DEFAULT
2,在程序中加入下面的代碼
顯示圖片:
- PackageManager p = getPackageManager();
- p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
隱藏圖標:
- PackageManager p = getPackageManager();
- p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
PackageManager.COMPONENT_ENABLED_STATE_ENABLED //顯示應用圖標
PackageManager.COMPONENT_ENABLED_STATE_DISABLED //隱藏應用圖標
我用這倆個值來顯示和隱藏應用圖標有問題,隱藏以后就無法在顯示應用圖標了,在設置里的所有應用里也找不到了;
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT //顯示應用圖標
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER // 隱藏應用圖標
將參數值該成這兩個值就沒有問題了,建議使用這兩個值,
3,去掉android:icon=”@drawable/ic_launcher”中的資源啊,等等等等。。。
但是試過了每一種方法之后你都發現起到了作用但是卻產生了其他的問題
這里先一個一個的解釋下,
如果去掉<category android:name=”android.intent.category.LAUNCHER” />,就表示app沒有啟動入口了,這樣子確實是解決了不顯示圖標的效果,但是那樣的話我們的應用也運行不了了。頭疼~~~
第二種 ,我們來看看android developer 上的說明:
public static final int COMPONENT_ENABLED_STATE_DISABLED
Flag for setApplicationEnabledSetting(String, int, int)
and setComponentEnabledSetting(ComponentName, int, int)
: This component or application has been explicitly disabled, regardless of what it has specified in its manifest.
意思是,即使你在manifest中聲明了這個component或application,當你設置為COMPONENT_ENABLED_STATE_DISABLED時,他們都是不可用的。也就是說,如果你在MainActivity中這樣設置了,那么應用圖標不會顯示,應用也不會運行。
那么,這也是不可行的~~~
第三種就不說了,我覺得是狗急跳牆的做法。
———————————分割線—————————————
接下來我要說的這種方法可以隱藏圖標,同是也可以正常啟動運行。
在manifest的入口activity里面intent-filter中設置<data></data>元素。
比如:
<data android:host=”AuthActivity” android:scheme=”com.android.example” />
注意,android:scheme是大小寫敏感的,必須以小寫字母開頭
也就是這個MainActivity可以響應Uri為com.android.example://AuthActivity的特定 Intent
但是為什么加入這個之后app就不顯示圖標了呢?
因為我們把app的入口Activity申明為由接收隱士的Intent來啟動,這樣自然也就不會顯示圖標了。
好了,如果需要顯示圖標的話而且也必須響應上述Uri的話,那么我們可以在該Activity中再加入一個intent-filter標簽,將data元素移到新建的標簽中。這樣應用既可以顯示圖標又可以響應特定的Uri了。