簡體   English   中英

一鍵啟用或禁用啟動意圖過濾器活動

[英]Enable or disable launch intent-filter activities with one button

我有一個包含多個活動的應用程序,它們在清單中都有一個啟動意圖過濾器,因此它們可以在啟動器上顯示幾個圖標,有一個主要活動,其余的默認情況下使用android:enabled="false"禁用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_ENABLEACTION_DISABLE按鈕啟用或禁用活動來完美地實現,但這對可用性ACTION_ENABLE ,相反,我只想使用一個按鈕來啟用或禁用活動。

我需要知道的是如何獲取活動的狀態,因此,如果活動為android:enabled="false"顯示帶有ACTION_EANBLE的按鈕,如果活動為android:enabled="true"顯示帶有ACTION_DISABLE的按鈕。

您可以查詢PackageManager以確定是否啟用了組件:

PackageManager pm = getPackageManager();
ComponentName cn = new ComponentName(...);
ActivityInfo info = pm.getActivityInfo(cn, 0);
if (info != null && info.enabled) {
    // Component is enabled
    ...
} else {
    // Component is disabled
    ... 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM