Никогда не вмешивайтесь в сухопутную войну в Азии.
у использовать некоторыеDevicePolicyManager методы в моем приложении. DevicePolicyManager был представлен в OS 2.2, но мое приложение должно продолжать работать на устройствах OS 2.1.
Вот псевдокод для того, что я хочу сделать:
if (needSecurity)
{
if (runningOS2.2orGreater)
{
// Invoke the required security policy, e.g.
setPasswordQuality(myComponentName, PASSWORD_QUALITY_NUMERIC)
}
else
{
// Tell the user they can't use this feature
}
}
Прочитав документы, я думаю, что мне также может понадобитьсяDeviceAdminReceiver обрабатывать обратные вызовы onPasswordFailed и onPasswordSucceeded.
Из других вопросов Stackoverflow (например,Вот), Я считаю, у меня есть два варианта:
1. Отражение
Продолжайте сборку с OS 2.1 SDK и используйте отражение для вызова классов во время выполнения, например,
Class myClass =
ClassLoader.getSystemClassLoader().loadClass("android.app.admin.DevicePolicyManager")
Object DPMInstance = myClass.newInstance();
Method myMethod = myClass.getMethod("setPasswordQuality",
new Class[] { ComponentName.class,
int.class });
myMethod.invoke(DPMInstance,
new Object[] { myComponentName,
PASSWORD_QUALITY_NUMERIC });
Если мне нужно реализовать DeviceAdminReceiver, будет ли работать отражение? Как бы я обработал обратные вызовы для DeviceAdminReceiver и перезвонил в мои собственные классы приложений?
2. Условная загрузка классов
Изменить, чтобы построить против OS 2.2 SDK. Во время выполнения загружайте классы OS 2.2 только в том случае, если текущей версией устройства является OS 2.2 или новее, например
int sdk = new Integer(Build.VERSION.SDK).intValue();
if (sdk > 7)
{
sLog.info("OS 2.2 or later");
return new myClassImplementsDeviceAdminInterfaces();
}
else
{
sLog.info("OS 2.1 or earlier");
return new myClassDoesNotSupportDeviceAdmin();
}
Этот подход выглядит так, как будто он создаст более простой код для поддержки и, вероятно, будет работать с DeviceAdminReceiver. Кто-нибудь знает какие-либо недостатки или осложнения?
Итак, мои вопросы:
Вы бы порекомендовали рефлексию или условную загрузку классов для использования DevicePolicyManager?Нужно ли мне DeviceAdminReceiver или я могу определить, есть ли у пользователя подходящий пароль, например, неоднократно звоняisActivePasswordSufficient в моем приложении, чтобы подтвердить, что это было сделано?Любые другие советы, если они есть (например,этот вопрос предполагает, что могут быть проблемы, заставляющие пользователя сбросить свой пароль).Спасибо!