【问题标题】:Enable/disable an activity programmatically以编程方式启用/禁用活动
【发布时间】:2013-07-03 20:32:18
【问题描述】:

我的应用中有一个活动,我一直保留为

android:enabled="false"

现在我希望当一个按钮被点击时它应该得到更换器

android:enabled="true"

我该怎么做?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    这是一个如何启用/禁用 Activity 的示例:

        PackageManager pm = getPackageManager(); 
        pm.setComponentEnabledSetting(new ComponentName(this, com.packagename.MyActivity.class),
                                      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    
        pm.setComponentEnabledSetting(new ComponentName(this, com.packagename.MyActivity.class),
                                      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    

    【讨论】:

    • 我已将它放在按钮的 onClick 方法下,但出现错误提示“构造函数 ComponentName() 未定义
    • 构造函数中的this是一个上下文,因此您必须将其替换为“myactivity.this”,其中myactivity是您的按钮所属的活动
    【解决方案2】:

    这是一个很好的方法:

      public static void setActivityEnabled(Context context,final Class<? extends Activity> activityClass,final boolean enable)
        {
        final PackageManager pm=context.getPackageManager();
        final int enableFlag=enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
        pm.setComponentEnabledSetting(new ComponentName(context,activityClass),enableFlag,PackageManager.DONT_KILL_APP);
        }
    

    示例用法:

    setActivityEnabled(this,SomeActivity.class,false);
    

    【讨论】:

    【解决方案3】:

    使用PackageManager and setComponentEnabledSetting() 启用或禁用应用中的任何组件:活动、服务等。

    【讨论】:

    • @VyprNoch:您可以随时进行操作。 :-)
    • @CommonsWare :作为系统应用程序,我可以禁用其他包或包本身的组件吗?还是需要系统签名?
    • @Saty:我不知道,我不知道——对不起!
    • @CommonsWare 我正在启用和禁用活动以及提到的方法。但在某些手机中,应用程序会在后台运行,从而提供有线体验。
    • @AmanSrii:那么也许您不应该启用和禁用活动,而是为您要解决的任何业务问题找到其他解决方案。就个人而言,我已经启用和禁用了接收器,但我不会启用或禁用活动。在某些情况下启用和禁用活动会产生副作用,我对此并不感到惊讶。
    【解决方案4】:

    如果您使用的是 productFlavors,您可以为每种口味设置单独的 AndroidManifest 文件。在这些中,您可以轻松地覆盖主清单文件中的属性。在构建特定风味清单时,合并会根据所选风味合并清单。

    在您想要禁用特定活动的风味清单中,您可以这样做

        <activity
            android:name="com.facebook.CustomTabActivity"
            android:enabled="false"
            tools:node="remove">
        </activity>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      相关资源
      最近更新 更多