Глядя на платформу, я вижу следующее:
<!-- Allows an application to change whether an application component (other than its own) is
enabled or not. -->
<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"
android:label="@string/permlab_changeComponentState"
android:description="@string/permdesc_changeComponentState"
android:protectionLevel="signatureOrSystem" />
Обратите внимание, что, поскольку это «signatureOrSystem» (и оно объявлено в системе), оно может использоваться только приложениями, подписанными с помощьюподпись системы, другими словами, вы должны быть поставщиком Android (HTC, Samsung, Motorola и т. д.).См. Это для получения дополнительной информации:
http://developer.android.com/guide/topics/manifest/permission-element.html
ОБНОВЛЕНИЕ:
Гурджиндер Сингх Пабла имеет правильный ответ, если вы пытаетесь изменитьвключите состояние ваших собственных компонентов или приложений, тогда вам нужно убедиться, что они имеют одинаковый идентификатор пользователя, который установлен в AndroidManifest.Вам нужно быть Продавцом, только если вы хотите отключить другие пакеты, которые имеют разные идентификаторы пользователей.Вы можете увидеть проверку в источнике Android в PackageManagerService.java:
final int uid = Binder.getCallingUid();
final int permission = mContext.checkCallingPermission(
android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE);
final boolean allowedByPermission = (permission == PackageManager.PERMISSION_GRANTED);
// ...
if (!allowedByPermission && (uid != pkgSetting.userId)) {
throw new SecurityException(
"Permission Denial: attempt to change component state from pid="
+ Binder.getCallingPid()
+ ", uid=" + uid + ", package uid=" + pkgSetting.userId);
}