【问题标题】:How to enable and disable a component?如何启用和禁用组件?
【发布时间】:2013-06-28 21:28:54
【问题描述】:

我最初的问题基本上是这样的:Clearing and setting the default home application

这个问题的回答令我满意,但是,我在回答中难以理解的是如何在 java 代码的清单中启用和禁用组件?

【问题讨论】:

    标签: android


    【解决方案1】:

    通过使用包管理器,您可以启用或禁用清单文件中声明的组件 有两个标志PackageManager.COMPONENT_ENABLED_STATE_DISABLED 用于禁用组件,PackageManager.COMPONENT_ENABLED_STATE_ENABLED 用于启用组件。

    PackageManager pm = getApplicationContext().getPackageManager();
    ComponentName componentName = new ComponentName("com.app",
        ".broadcast_receivers.OnNetworkChangedReceiver");
    pm.setComponentEnabledSetting(componentName,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP);
    

    Android 清单:

    <receiver
      android:name=".broadcast_receivers.OnNetworkChangedReceiver"
      android:enabled="true"
    >
      <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
      </intent-filter>
    </receiver>
    

    官方文档:setComponentEnabledSetting

    【讨论】:

    • 启用和禁用组件的代码相同,还是有细微差别?
    • 用于禁用组件 PackageManager.COMPONENT_ENABLED_STATE_DISABLED 并用于启用组件 PackageManager.COMPONENT_ENABLED_STATE_ENABLED
    • 这是否仅针对活动配置文件或设备上的所有配置文件禁用组件?如果所有配置文件,有没有办法做到每个配置文件?
    • 更通用的方法:
    【解决方案2】:

    采用 Pawan 方法实现更通用的实现:

    public static void setComponentState(Context context, String packageName , String componentClassName, boolean enabled)
    {
        PackageManager pm  = context.getApplicationContext().getPackageManager();
        ComponentName componentName = new ComponentName(packageName, componentClassName);
        int state = enabled ?  PackageManager.COMPONENT_ENABLED_STATE_ENABLED :  PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
        pm.setComponentEnabledSetting(componentName,
                state,
                PackageManager.DONT_KILL_APP);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多