2011-06-20 38 views
9

我需要在啓動程序中隱藏或顯示我的應用程序的圖標,具體取決於某些運行時信息。我想仍然可以通過明確的意圖運行該活動,因此禁用該活動不是一個好的選擇(我甚至不知道它是否可以工作,但我還沒有嘗試過,但我想會)。那麼,我可以禁用一個意圖過濾器嗎?Android:我可以以編程方式啓用/禁用活動的意圖過濾器嗎?

+0

回答是在這裏,http://stackoverflow.com/questions/40505357/disable-the-intent-filter-from-android-manifest-programatically/40505924#40505924 – Takermania

回答

25

你不能直接這樣做,但你可以創建一個在您AndroidManifest.xml一個activity alias與有問題的意圖過濾器,然後啓用或禁用使用PackageManager#setComponentEnabledSetting()別名,讓你的其他意圖過濾器在活動的主副本所以他們不會受到影響。

+2

從[這篇文章](http:///stackoverflow.com/questions/23919329/android-how-to-create-componentname-in-code-using-activity-alias)你的活動別名的組件名將是'new ComponentName($ packageName,$ packageName +「 。「+ $ aliasName)'其中$ packageName是你的應用程序的包(通過getActvitiy()。getPackageName()')獲取它。 –

+2

如果您使用的是現代版本的android gradle插件,您還可以從'BuildConfig.APPLICATION_ID'(或者稍微老版本的插件上的'BuildConfig.PACKAGE_NAME')獲取包名。這避免了爲了獲得始終是相同的字符串而進行的運行時調用。 – mlc

+0

我可以刪除多個意圖嗎? 如果我的活動對不同類型的NFC標籤有多個意圖,並且某些時候我不希望我的應用檢測到NFC標籤,那麼是否有可能有問題地刪除多個意圖? – Query

相關問題