我想在我的应用中使用一些DevicePolicyManager方法。 DevicePolicyManager是在OS 2.2中引入的,但我的应用程序必须继续在OS 2.1设备上运行。在Android上使用OS 2.2 DevicePolicyManager SDK类,同时支持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回调。
从其它问题#1(例如here),我相信我有两个选择:
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以确认它已完成?
- 任何其他提示,如果你有他们(例如this question表明可能有问题迫使用户重置他们的密码)。
谢谢!
这真棒,我甚至都不知道这些API存在于2.1中,但只是隐藏起来。 – Tom 2012-03-11 00:59:21