2011-04-27 18 views
1

我想在我的应用中使用一些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表明可能有问题迫使用户重置他们的密码)。

谢谢!

+0

这真棒,我甚至都不知道这些API存在于2.1中,但只是隐藏起来。 – Tom 2012-03-11 00:59:21

回答

3

如果我需要实现一个DeviceAdminReceiver,是否会反射工作?

不是。你需要使用有条件的类加载,这意味着你可能只是去那条路线开始。

有没有人知道它的任何缺点或复杂性?

我代表“任何人”的小角落发言,我没有意识到任何缺点。不过,我会在Build上使用VERSION_CODES常量,而不是整数(7)。而且,除非你支持1.5,否则你可以在Build上使用SDK_INT而不是SDK

您会推荐使用DevicePolicyManager的反射或条件类加载吗?

有条件的类加载。

我需要一个DeviceAdminReceiver,还是可以检测用户是否有合适的密码通过在我的应用程序中反复调用isActivePasswordSufficient来确认它已完成?

我无法回答。如果你没有得到解决这个问题的另一个答案,你可以考虑在它自己的问题中提出这个问题。

任何其他提示,如果你有他们

从未涉足亚洲陆地战。