在 Android 上使用 OS 2.2 DevicePolicyManager SDK 类,同时支持 OS 2.1 设备

2023-12-15

我想用一些设备策略管理器我的应用程序中的方法。 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
  }
}

通过阅读文档,我认为我可能还需要设备管理接收器处理 onPasswordFailed 和 onPasswordSucceeded 回调。

来自其他 Stackoverflow 问题(例如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在我的应用程序中确认它已经完成?
  • 任何其他提示(如果您有的话)(例如这个问题表明可能存在迫使用户重置密码的问题)。

Thanks!


如果我需要实现 DeviceAdminReceiver,反射会起作用吗?

并不真地。您需要使用条件类加载,这意味着您也可以一开始就走这条路。

有人知道它有什么缺点或并发症吗?

代表我的“任何人”这个小角落发言,我不知道有任何缺点。我会用VERSION_CODES常量Build但是,而不是整数 (7)。并且,除非您支持 1.5,否则您可以使用SDK_INT on Build而不是SDK.

您会建议使用 DevicePolicyManager 进行反射或条件类加载吗?

有条件的类加载。

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

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

任何其他提示(如果有的话)

永远不要卷入亚洲的陆地战争。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 上使用 OS 2.2 DevicePolicyManager SDK 类,同时支持 OS 2.1 设备 的相关文章

随机推荐

  • Wagtail 单元测试:添加子页面将它们转换为基本类型

    尝试为 Wagtail 创建一些单元测试并遇到以下问题 gt gt root FrontPage add root instance FrontPageFactory build gt gt root
  • 使用 LINQ 进行多重排序[重复]

    这个问题在这里已经有答案了 我从一个基本类开始 我想使用 LINQ 在列表中操作它 如下所示 public class FooBar public virtual int Id get set public virtual string F
  • Delphi 7 - 如何使用输入框

    我正在编写一个程序 您必须在输入框中输入密码才能访问该程序的最小功能 但是 如果您单击输入框中的 取消 我的程序会出现错误消息 所以我想知道是否有人知道我如何才能做到这一点 因为通过 Messagedlg 我知道你使用 IF 但是我怎样才能
  • 在 WCF 中实现 JSON-RPC

    我一直在四处寻找 但没有找到解决方案 我想用 WCF 实现一个 JSON RPC 服务器 我找到了这个http jsonrpc2 codeplex com 但它不使用 WCF 我知道如何集成它 有人可以给我一个关于如何将所有东西组合在一起的
  • 区分不同类型的 MIFARE Ultralight

    如何识别不同类型的MIFARE Ultralight标签 在文档中AN10834Ultralight 和 Ultralight C 的不同之处在于 Auth 的答案 这个 验证 是什么 芯片的datasheet中没有对该功能的描述 我注意到
  • AOSP - 错误:覆盖目标 (...) 的命令,先前在 (...) 定义

    我正在尝试为不支持的设备构建 AOSP surnia Moto E2 2015 LTE 我之前解决了很多问题 但现在我遇到了一个无法避免的问题 我看到很多人都有这个问题 但他们只是警告 我能做些什么 或者你能帮我找到 surnia 设备树
  • “char *var[3]”和“char var[3][15]”有什么区别?

    我对以下两种方式感到困惑 char var 3 15 Hello world good bad as known this is for an 2D array char var 3 Hello world good bad and thi
  • GData 静态库:使用 -fno-objc-arc 从 ARC 中排除文件?

    我在使用 ARC 的应用程序中使用 GData 静态库 谷歌的说明说将头文件从库链接到项目目标 问题是 当我这样做时 我会收到编译器错误 因为 GData 库与 ARC 不兼容 谷歌声明 弧兼容性 当库源文件直接编译到使用 ARC 的项目中
  • 如何使用正则表达式(递归?)匹配嵌套函数调用(括号对)

    我正在寻找一个正则表达式 来匹配未知数量的嵌套函数 所以 expression function expression function function expression function function function expr
  • 如何从 URL 中删除 index.php?

    我的 Magento 安装中的所有 URL 都需要包含 index php 例如 http example com index php admin http example com index php customer account lo
  • 我无法在 iOS 中从 Facebook 获取用户数据

    我是 iPhone 编程新手 使用下面的代码我登录 Facebook 并获取数据 但这里的问题是 如果单击 Loginwithfacebook 按钮 Facebook 对话框打开 之后 如果再次单击相同的内容 我将输入 Facebook 的
  • JPA 2.0:在 JPA 2.0 中使用 javax.validation.* 包的异常

    当我尝试使用 hibernate 使用 JPA 进行 bean 验证时 会发生以下异常 Exception in thread main javax persistence PersistenceException PersistenceU
  • 8086中的堆栈段和堆栈指针

    我对堆栈段 ss 和堆栈指针 sp 寄存器有点困惑 当堆栈为空时 sp值等于ss值吗 我读到 当我们将一个字 2字节 推入堆栈时 sp会减2 如果第一个语句为真 sp ss 那么我可以说 如果堆栈不为空 堆栈指针的值总是较小或等于堆栈段的值
  • Javascript 代码计算按钮的点击次数

    我有一个页面 我想计算按钮的点击次数 数字显示在该按钮的正下方 我尝试搜索并找到了这个 我认为这不会计算点击总数 跟踪按钮点击次数 我熟悉 javascript 代码 因此任何帮助都会很有用 HTML 代码
  • 如何从 Firebase 托管应用程序引用 Firebase Functions 配置变量?

    我正在将 Heroku 托管的 ReactJS NodeJS 应用程序转换为托管在 Firebase 上 由于 Firebase 仅处理静态页面 因此我需要重新配置开发 暂存 生产环境的私有环境特定变量的配置方式 例如 在我定义这些变量之前
  • 如何将 Managed Bean 字段设置为 ui:param 的值?

    我有一个 JSF 页面 它包含在其他 JSF 页面中 基本上是页面标题 包含公共信息 该公共页面有其自己的控制器 并且依赖于包含该公共页面的页面向其传递一些公共数据 具体来说 我目前正在尝试使用以下方法将此公共页面包含在其他页面上
  • Python 中的好或坏实践:在文件中间导入 [重复]

    这个问题在这里已经有答案了 假设我有一个相对较长的模块 但只需要一次外部模块或方法 在模块中间导入该方法或模块是否被认为可以 或者应该import仅位于该模块的第一部分 Example import string pythis pythat
  • Java:在“this”类而不是子类中调用函数(类似于“super”)

    在 Java 中是否可以以始终执行 本地定义 版本而不是子类中的重写版本的方式调用可重写方法 IE 有没有类似的super指的是这个类 而不是超类 让我给出一个代码示例 希望能够清楚地说明我想要做什么 class A void foo Sy
  • 批处理文件:如果注册表项的数据等于

    我正在尝试为某些资源管理器设置制作一个 bat 切换器 为此 我需要批处理文件来查询注册表项的数据 然后相应地设置该项 例如 在 ActionScript 3 或 JavaScript 中 它会是这样的 if HideFileExt 000
  • 在 Android 上使用 OS 2.2 DevicePolicyManager SDK 类,同时支持 OS 2.1 设备

    我想用一些设备策略管理器我的应用程序中的方法 DevicePolicyManager 是在 OS 2 2 中引入的 但我的应用程序必须继续在 OS 2 1 设备上运行 这是我想做的事情的伪代码 if needSecurity if runn