我有一个包含多个活动的应用程序,它们都在清单中有一个启动意图过滤器,因此它们可以在启动器上显示几个图标,有一个主要活动,其余部分默认情况下被禁用{{1这是我的清单的一部分:
android:enabled="false"
我找到了一种使用以下代码启用或禁用其他活动的方法:
<activity
android:name="com.myapp.MainActivity"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.myapp.Activity_1"
android:icon="@mipmap/ic_launcher"
android:label="@string/secondary_activity"
android:enabled="false">// HERE I DISABLE THE ACTIVITY
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这可以通过使用public static void enableComponent(Context context, Class<?> componentClass, boolean isEnable) {
int enableFlag = isEnable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
context.getPackageManager().setComponentEnabledSetting(new ComponentName(context, componentClass), enableFlag, PackageManager.DONT_KILL_APP);
}
private void setupDetailsOverviewRowPresenter() {
detailsPresenter.setOnActionClickedListener(new OnActionClickedListener() {
@Override
public void onActionClicked(Action action) {
if (action.getId() == ACTION_ENABLE){
mSelectedApp = (App) getActivity().getIntent().getSerializableExtra(DetailsActivity.APP);
enableComponent(mContext, com.myapp.Activity_1.class, true);
}
}else if (action.getId() == ACTION_DISABLED){
mSelectedApp = (App) getActivity().getIntent().getSerializableExtra(DetailsActivity.APP);
enableComponent(mContext, com.myapp.Activity_1.class, false);
}
}
});
}
或ACTION_ENABLE
按钮启用或禁用活动来完美运行,但这对可用性不利,相反,我只想使用一个按钮来启用或禁用该活动。
我需要知道的是如何获取活动的状态,因此如果活动为ACTION_DISABLE
,则显示带有android:enabled="false"
的按钮,如果活动为ACTION_EANBLE
则显示按钮与android:enabled="true"
。