Android - PackageManager标志

时间:2014-05-15 18:55:08

标签: android android-package-managers

我正在浏览PackageManager API。我发现定义了以下常量:

1) GET_DISABLED_COMPONENTS
2) GET_DISABLED_UNTIL_USED_COMPONENTS
3) COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
4) COMPONENT_ENABLED_STATE_DISABLED_USER
5) COMPONENT_ENABLED_STATE_DISABLED
6) COMPONENT_ENABLED_STATE_DEFAULT
7) COMPONENT_ENABLED_STATE_ENABLED
8) GET_UNINSTALLED_PACKAGES

在阅读documentation时,我看到对于常量5-7,无论在清单文件中如何指定组件,都可以启用/禁用组件。

对于3,文件说:

This application should be considered, until the point where the user actually
wants to use it.

这是什么意思?

4,文件说:

The user has explicitly disabled the application, regardless of what it has 
specified in its manifest.

如果此标志与应用程序有关,为什么名称以' COMPONENT' ?用户如何禁用该应用程序?

对于8,文档说:

Flag parameter to retrieve some information about all applications (even 
uninstalled ones) which have data directories. This state could have 
resulted if applications have been deleted with flag DONT_DELETE_DATA with 
a possibility of being replaced or reinstalled in future.

指定DONT_DELETE_DATA标志在哪里?

总而言之,如果有人可以为开发人员解释这些常量的用例,那将会有所帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

我在我的一个项目中使用它们。在这里查看。 https://github.com/slightfoot/android-launcher-badges

不确定是否有帮助。

编辑: 你会看到这里使用的大多数标志:AppBadge.java其余的都是非常自我解释的。 The documentation似乎很好地描述了一切。

  1. COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED (在API级别18中添加)

    它提到的例子似乎“足以解释可能的用例。”

      

    仅限setApplicationEnabledSetting(String, int, int)的标记:应考虑此应用程序,直到用户实际想要使用它为止。这意味着它通常不会显示给用户(例如在启动器中),但是用户界面的各个部分可以使用GET_DISABLED_UNTIL_USED_COMPONENTS仍然可以看到它并允许用户选择它(例如IME,设备管理员等)。一旦用户选择了应用程序,此类代码也应在此时启用。此选项目前无法与setComponentEnabledSetting(ComponentName, int, int)一起使用。

  2. COMPONENT_ENABLED_STATE_DISABLED_USER (在API级别14中添加)

    看起来他们的目的是最终与setComponentEnabledSetting合作,但目前他们不能。这是为了向前兼容,文档说明您可以使用setApplicationEnabledSetting

      

    仅限setApplicationEnabledSetting(String, int, int)的标记:用户已明确禁用该应用程序,无论其在清单中指定了什么。因为这是由于用户的请求,所以如果需要,他们可以通过适当的系统UI重新启用它。此选项目前不能与setComponentEnabledSetting(ComponentName, int, int)一起使用。

  3. DONT_DELETE_DATA 标记已重命名为 DELETE_KEEP_DATA ,文档尚未更新。它已被标记为@hide,因为它不适合公共开发人员使用。

    /**
     * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
     * package's data directory.
     *
     * @hide
     */
    public static final int DELETE_KEEP_DATA = 0x00000001;