Android隱藏app桌面圖示
阿新 • • 發佈:2019-01-08
在啟動的activity的AndroidManifest註冊中,新增隱式啟動的data:
這個是我當時寫的Demo,也是最終的處理方案,這樣把啟動activity的intent變為隱式的,桌面的圖示就會被隱藏,那麼就實現我希望實現的效果了。<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tq.time"> <!-- <data android:host="MainActivity" android:scheme="com.tq.time" /> 這條屬性可以讓啟動app入口Activity申明為由接收隱士的Intent來啟動,這樣自然也就不會顯示圖示了 --> <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"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <data android:host="MainActivity" android:scheme="com.tq.time" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
下面是要說一下當時探索的時候遇到的問題。
刪除應用圖標的若干解決方案:
1、AndroidManifest.xml檔案中在入口Activity的intent-filter裡去掉
[html] view plain copy print?
- <categoryandroid:name=”android.intent.category.LAUNCHER” />
或者在在程式中加入下面的程式碼
init();
// 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 //隱藏應用圖示
網上找到的部落格說這倆個值來顯示和隱藏應用圖示有問題,隱藏以後就無法在顯示應用圖示了,在設定裡的所有應用裡也找不到了;
但是實際除錯中,我根本無法安裝demo到手機上,可能是新的AS不允許這種操作吧!
但是會有如下幾個問題:1、如果去掉<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中這樣設定了,那麼應用圖示不會顯示,應用也不會執行。
還有一種方案但是這個方案是不是在所有的android 手機都試用還有待確認,我是這麼操作的,在AS裡面修改程式碼包名路徑,在每個相關地方修改但是不要修改清單檔案裡的,這樣在MIUI系統裡系統清單還是修改之前的包名,但是實際包名已經是修改之後的了,也達到了沒有圖示的要求,但是會導致之後安裝什麼app都不現實圖示
最優的解決方案:
就是我開始用的那個方法!
接下來我要說的這種方法可以隱藏圖示,同是也可以正常啟動執行。在manifest的入口activity裡面intent-filter中設定<data></data>元素。
比如:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <data android:host="MainActivity" android:scheme="com.tq.time" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
注意,android:scheme是大小寫敏感的,必須以小寫字母開頭
也就是這個MainActivity可以響應Uri為com.android.example://AuthActivity的特定 Intent
但是為什麼加入這個之後app就不顯示圖示了呢?
因為我們把app的入口Activity申明為由接收隱士的Intent來啟動,這樣自然也就不會顯示圖示了。如果需要顯示圖示的話而且也必須響應上述Uri的話,那麼我們可以在該Activity中再加入一個intent-filter標籤,將data元素移到新建的標籤中。
這樣應用既可以顯示圖示又可以響應特定的Uri了。