Android 4.3 Ошибка DeviceAdmin для профиля не владельца

Я использую Nexus 7, обновленный до 4.3. У меня есть приложение, которое требует прав администратора устройства для блокировки/стирания устройства. Я присвоил Device Admin право на свое приложение в профиле владельца. Поэтому, когда я переключаюсь на другой профиль пользователя, я вижу свое приложение в списке приложений Device Admin. Однако, когда я даю команду Lock в этом профиле пользователя не Owner, я получаю исключение как "java.lang.SecurityException: Нет активного администратора, принадлежащего uid XXXXXX".

Метод DevicePolicyManager isActiveAdmin() также возвращает true в этом профиле, но он не может принять меры и сбрасывает приложение.

Я предполагаю, что после того, как администратор устройства настроен для профиля пользователя Owner, он автоматически применяется ко всем другим профилям пользователя. Любая идея, почему это происходит? Кроме того, есть ли какая-либо документация, в которой указывается, какое внимание должно принять мое приложение для обработки нескольких профилей пользователей, если для моего приложения требуются права администратора устройства.

Ответ 1

Установили ли вы в device_admin_sample.xml, какая политика администратора соответствует ожидаемому поведению приложения?

Задайте параграфы администратора как

 android:label="@string/enterprise_device_admin" 
        android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     android:resource="@xml/enterprise_device_admin" /> 

Вот типичный контент для вашего файла device_admin_sample.xml:

<activity android:name=".app.DeviceAdminSample"
        android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
    android:label="@string/sample_device_admin"
    android:description="@string/sample_device_admin_description"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
        android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

Далее читайте пошаговые инструкции, которые также стоит проверить: