以编程方式启用/禁用活动

16

我的应用程序中有一个活动,我将其保留为

android:enabled="false"

现在我希望当一个按钮被点击时,它应该被更改为

android:enabled="true"

我该如何做到这一点?

4个回答

31

以下是一个示例,说明如何启用/禁用 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()未定义”。 - vishalmullur
2
在构造函数中,this 是一个上下文,因此您需要将其替换为“myactivity.this”,其中 myactivity 是您的按钮所属的活动。 - Emanuel Moecklin

6
这是一个不错的实现方式:
  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);

你如何启用或禁用一个活动别名?活动别名似乎没有与之关联的类。 - Fat Monk
你尝试过使用确切的路径来访问它吗?可以使用这个构造函数:https://developer.android.com/reference/android/content/ComponentName.html#ComponentName(android.content.Context,%20java.lang.String)。 - android developer

4

@VyprNoch:你可以随时做它。 :-) - CommonsWare
@CommonsWare 我已经按照您提到的方法成功启用和禁用了一些活动。但是在某些手机上,应用程序会进入后台,这会给用户带来奇怪的体验。 - Aman Srivastava
@AmanSrii:也许你不应该启用和禁用活动,而是找到其他解决业务问题的方法。就我个人而言,我已经启用和禁用了接收器,但我不会启用或禁用活动。我并不惊讶在某些情况下启用和禁用活动会产生副作用。 - CommonsWare
@AmanSrii:我不觉得你启用和禁用这些操作遇到问题有什么奇怪的。 - CommonsWare
让我们在聊天中继续这个讨论 - Aman Srivastava
显示剩余5条评论

0

如果您正在使用productFlavors,您可以为每个flavor拥有单独的AndroidManifest文件。在这些文件中,您可以轻松地覆盖主Manifest文件中的属性。构建特定flavor时,manifest合并器会根据所选的flavor合并Manifest。

在flavor的清单中,如果您想要禁用特定的活动,则可以像这样进行操作

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接