2012-07-18 105 views
0

在Android ICS中,我們有能力禁用內置應用程序。 是否有可能知道在代碼中是否禁用或啓用了特定的應用程序?如何知道Android應用程序是否被禁用ICS

+0

你要這個幹什麼?如果瀏覽器被禁用,Android會搜索一個新的Intent來啓動一個webview。如果沒有發現,Android會敬酒,行動是不可能的。 – shkschneider 2012-07-18 09:41:15

+0

是的,那可能是真的。 但是,如果Google地圖已停用,我在啓動導航時遇到了問題。還有一些其他應用程序。 – 2012-07-18 12:01:21

回答

6
ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo("your_package",0); 

boolean appStatus = ai.enabled; 

如果appStatusfalse然後應用程序被禁用:)

0

接受的答案可能會導致異常以及,即NameNotFoundException,因此您可能需要構建默默地捕捉流例外並決定啓用狀態(它實際上是第三個狀態,即未安裝)。

因此,這將更好地找到這樣的啓用以及安裝狀態:

public static final int ENABLED = 0x00; 
    public static final int DISABLED = 0x01; 
    public static final int NOT_INSTALLED = 0x03; 

    /** 
    * @param context Context 
    * @param packageName The Package name of the concerned App 
    * @return State of the Application. 
    * 
    */ 
    public static int getAppState(@NonNull Context context, @NonNull String packageName) { 
     final PackageManager packageManager = context.getPackageManager(); 

     // Check if the App is installed or not first 
     Intent intent = packageManager.getLaunchIntentForPackage(packageName); 
     if (intent == null) { 
      return NOT_INSTALLED; 
     } 
     List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     if(list.isEmpty()){ 
      // App is not installed 
      return NOT_INSTALLED; 
     } 
     else{ 
      // Check if the App is enabled/disabled 
      int appEnabledSetting = packageManager.getApplicationEnabledSetting(packageName); 
      if(appEnabledSetting == COMPONENT_ENABLED_STATE_DISABLED || 
        appEnabledSetting == COMPONENT_ENABLED_STATE_DISABLED_USER){ 
       return DISABLED; 
      } 
      else{ 
       return ENABLED; 
      } 
     } 
    } 
相關問題