android 禁用和開啓四大組件的方法(setComponentEnabledSetting )

爲什麼要關閉組件? 
在用到組件時,有時候我們可能暫時性的不使用組件,但又不想把組件kill掉,比如創建了一個broadcastReceiver廣播監聽器,用來想監聽第一次開機啓動後獲得系統的許多相關信息,並保存在文件中,這樣以後每次開機啓動就不需要再去啓動該服務了,也就是說如果沒有把receiver關閉掉,就算是不做數據處理,但程序卻還一直在後臺運行會消耗電量和內存,這時候就需要把這個receiver給關閉掉。 


如何關閉組件? 
關閉組件其實並不難,只要創建packageManager對象和ComponentName對象,並調用packageManager對象的setComponentEnabledSetting方法。

public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)

componentName:組件名稱 
newState:組件新的狀態,可以設置三個值,分別是如下: 
不可用狀態:COMPONENT_ENABLED_STATE_DISABLED 
可用狀態:COMPONENT_ENABLED_STATE_ENABLED 
默認狀態:COMPONENT_ENABLED_STATE_DEFAULT 
flags:行爲標籤,值可以是DONT_KILL_APP或者0。 0說明殺死包含該組件的app

public int getComponentEnabledSetting(ComponentName componentName)

獲取組件的狀態


實例:

實例一:禁止開機啓動的Receiver(可以是第三方的receiver)

final ComponentName receiver = new ComponentName(context,需要禁止的receiver); 
 final PackageManager pm = context.getPackageManager(); 
 pm.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);  }


實例二:隱藏應用圖標

如果設置一個app的mainActivity爲COMPONENT_ENABLED_STATE_DISABLED狀態

則不會再launcher的程序圖標中發現該app

PackageManager packageManager = getPackageManager();
        ComponentName componentName = new ComponentName(this, StartActivity.class);
        int res = packageManager.getComponentEnabledSetting(componentName);
        if (res == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                || res == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
            // 隱藏應用圖標
            packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
        } else {
            // 顯示應用圖標
            packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
                    PackageManager.DONT_KILL_APP);
        }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章