2013年3月22日金曜日

Androidでブロードキャストレシーバーやサービスを一時的に無効にするには?

Androidでブロードキャストレシーバーやサービスを一時的に無効にするにはどうしたらいいだろう。

PackageManagerにsetComponentEnabledSetting()というメソッドがあるので、例えばこんな風にできる。

/**
 * 各種コンポーネント(ブロードキャストレシーバーやサービス)を無効・有効にする
 * 
 * @param cxt コンテキスト
 * @param cls 無効(有効)にしたいクラス
 * @param disabled 無効にするかどうか
 */
public static void disableComponent(Context cxt, Class<?> cls, boolean disabled) {
  int newState = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
  if (!disabled) {
    newState = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
  }
  ComponentName compName = new ComponentName(cxt, cls);
  PackageManager pm = cxt.getPackageManager();
  pm.setComponentEnabledSetting(compName, newState, PackageManager.DONT_KILL_APP);
}