Диспетчер политик устройств - сброс пароля - проблемы с Android 3.0 - PullRequest
1 голос
/ 22 мая 2011

Я использую Device Policy Manager в своем приложении для Android, и у меня проблема с сотовыми устройствами. При попытке вызвать resetPassword я получаю исключение. Это не относится к Froyo или Gingerbread, так как оба работают нормально.

Ошибка:

java.lang.RuntimeException: Невозможно запустить приемник Package.Name.Test: java.lang.SecurityException: Отказ в разрешении: запись com.android.providers.settings.SettingsProvider uri content: // settings / secure from pid = x , uid = y требуется android.permission.WRITE_SETTINGS

Мой код Android выглядит следующим образом:

DevicePolicyManager mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);

if ((mDPM.getActiveAdmins() != null) && (mDPM.isAdminActive(new ComponentName(context, DeviceAdmin.class)))) {
    mDPM.resetPassword(extra, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
    mDPM.lockNow();
} else {
    Log.d(TAG, "Could not lock because device admin not enabled");
}

Проблема возникает по адресу:

mDPM.resetPassword(extra, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);

Мой Device_Admin.xml:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <force-lock />
        <wipe-data />
        <reset-password />
    </uses-policies>
</device-admin>

Как я уже говорил, администратор устройства отлично работает на устройствах Froyo и Gingerbread, хотя у меня действительно есть некоторые проблемы с пользователями, использующими разные защитные ключи, например, Droid X и HTC Sense. Эта проблема со временем. Когда я вызываю lockNow, устройство выключит экран, но HTC Sense или MotoBlur фактически не заблокируют клавиатуру до времени, которое было установлено в меню «Настройки», «Безопасность», «Блокировка телефона после».

Любая помощь будет потрясающей! Я только недавно приобрел сотовый планшет при вводе-выводе и еще не тестировал приложение на этом устройстве, но я вижу ошибки на веб-сайте маркета для пользователей с Xoom под управлением 3.0. Еще не видел ни одного 3.1 устройства.

Ответы [ 4 ]

2 голосов
/ 20 декабря 2011

Я тоже боролся с этим.Решение также указано в одной из ваших ссылок, но я упомяну его здесь и в случае, если оно кому-то поможет.

  • Если устройство новое (или сброс настроек)код не работает, как вы описываете.

  • Если пользователь вводит пароль с помощью меню настроек только один раз, каким-то образом тот же код начинает работать и продолжает работать.

Очень странная ошибка на самом деле !!

1 голос
/ 20 февраля 2012

Я также столкнулся с этой проблемой, и я могу сказать, что если вы не устанавливали пароль вручную хотя бы один раз, это вызовет принудительное закрытие запроса разрешения write_settings, но если вы попытаетесь один раз установить пароль оттуда вручную, подопечные это будет работать как шарм.

1 голос
/ 02 ноября 2011

На платформе Android Honeycomb 3.0 DevicePolicyServiceManager очень отличается от Gingerbread, весь поток resetPassword():

DevicePolicyServiceManager.resetPassword() --> 
LockPatternUtils.checkPasswordInHistory() --> 
LockPatternUtils.passwordToHash() --> 
LockPatternUtils.getSalt() --> 
LockPatternUtils.putLong(SALT_KEY, salt) --> 
Settings.Secure.putLong(SALT_KEY, salt)

Здесь вы должны знать, почему WRITE_SETTINGS требуется, кажется, это ошибка Google , они не поместили метод LockPatternUtils.checkPasswordInHistory () в блок Binder.clearCallingIndentity().

Еще одна вещь, даже если вы добавите разрешение WRITE_SETTINGS в свой файл AndroidManifest.xml, оно сообщит вам, что разрешение WRTITE_SECURE_SETTINGS также необходимо.

Надеюсь, Google сможет решить эту проблему как можно скорее.

PSПохоже, что эта проблема была исправлена ​​на платформе ICS, Google удалил checkPasswordInHistory () из блока resetPassword ().Я не думаю, что это хороший раствор и я не знаю почему?Может быть, они хотят выпустить ICS как можно скорее?

0 голосов
/ 25 мая 2011

Я смотрел на эту проблему (которая также легко воспроизводится на 3.1, кстати), но, похоже, вы уже разобрались с ней, основываясь на проблеме, которую вы подали . Я просто хотел отметить это здесь, на случай, если кто-нибудь еще попытается найти ответ.

...