以编程方式停用 Android 中的设备管理员?

2024-02-17

是否可以通过编程方式停用(第三方)设备管理员 http://developer.android.com/guide/topics/admin/device-admin.html app?

我能够使用激活的设备管理员来检索所有应用程序设备策略管理器 http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html and 获取活动管理员() http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#getActiveAdmins%28%29:

final DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
final List<ComponentName> adminList = dpm.getActiveAdmins();

for ( ComponentName app : adminList ) {
    Log.d(TAG, "App: ", app.getPackageName());
}

但是,为了停用它们,我无法使用删除活动管理员(...) http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#removeActiveAdmin%28android.content.ComponentName%29,因为它不会删除不是我自己的应用程序的组件。

我想用一个Intent and 启动活动() http://developer.android.com/reference/android/content/Context.html#startActivity%28android.content.Intent%29为了打开我想要停用的特定组件的设备管理员停用页面。是否可以?


实际上,可以直接进入管理屏幕,但我不确定它有多安全,因为 API 本身不可用,并且路径可能会因不同的 Android 版本和 ROM 而改变。

这是我测试过的:

这将直接进入您选择的应用程序的激活/取消激活屏幕:

final Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.DeviceAdminAdd"));
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,componentName);
activity.startActivity(intent);

这将进入管理应用程序列表:

final Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.DeviceAdminSettings"));
activity.startActivity(intent);

如果有人有更官方、更安全的方法,请写下来。

这些都是相当危险的,所以你可以先使用这个方法:

Intent intent=new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
final PackageManager packageManager=context.getPackageManager();
final List<ResolveInfo> resolveInfos=packageManager.queryIntentActivities(intent,0);
if(resolveInfos!=null&&!resolveInfos.isEmpty())
  try
    {
    final ResolveInfo resolveInfo=resolveInfos.get(0);
    intent=new Intent();
    intent.setComponent(new ComponentName(resolveInfo.activityInfo.packageName,resolveInfo.activityInfo.name));
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,componentNameResult);
    context.startActivity(intent);
    return true;
    }
  catch(final Exception e)
    {}

您可以为每个方法添加 try-catch ,如果全部失败,请使用:

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

以编程方式停用 Android 中的设备管理员? 的相关文章

随机推荐

  • 具体QPushButton样式

    如何自定义 QPushButton 或 QToolButton 的外观 使其看起来像elementaryos 的网页 按钮 我真正想要的是特征图像位置和侧面的文字 也许如果我幸运的话我也可以得到这样的边框 但我真的不需要标题下面的小描述 我
  • 如何让这个Javascript函数在IE浏览器中工作?

    此 JAVSCRIPT 功能的目的是防止用户输入任何字母字符 如果用户输入这些字符 光标根本不会移动并停留在同一位置 但是 如果用户输入数字 光标将移动到下一个位置 例如 在此文本字段中 我只允许用户输入数字 此方法在除 IE 8 及更早版
  • Bootstrap 3.1.0 导航栏上的全宽输入组

    我在使用 bootstrap v3 1 0 时遇到了一些问题 我需要获得适合导航栏整个宽度的搜索栏 如下所示 v3 0 3 http bootply com 109727 http bootply com 109727但感觉输入组有一些问题
  • C# 字符串创建(指定长度)

    是否有一种简洁的方法 即不是 for 循环 来创建指定长度的字符串 字符串中的内容并不重要 您可以使用the string构造函数需要一个char and an int http msdn microsoft com en us libra
  • php heredocs 语法中的条件语句?

    我想知道您是否可以在此处文档中包含条件语句 这是我的脚本 但它无法正确解析 username php代码 function doSomething username if isset SESSION u name reply a class
  • AppRegistryNotReady:惰性 format_html()?

    为什么我会收到此异常 Traceback most recent call last File path1 myapp isu myapp isu tests unit views test view isu py line 8 in
  • RxJS 节流行为;立即获取第一个值

    笨蛋示例 https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview 我知道 RxJS 5 0
  • 我们不能在 forEach 中重新分配数组值吗? [复制]

    这个问题在这里已经有答案了 问题陈述是 我应该用 0 替换 5 以下的任何数字 用 1 替换 5 及以上的任何数字 我试图重新分配值 但它不影响 为什么 function fakeBinary n let numbersArr n spli
  • 计算字符串开头的空格数[重复]

    这个问题在这里已经有答案了 如何计算 C 中字符串开头的空格数量 example this is a string 结果是 4 不知道如何正确执行此操作 Thanks Use Enumerable TakeWhile Char IsWhit
  • 在Android中我们如何复制文件并保留其只读属性?

    在我的 Android 应用程序中 我希望能够复制只读文件并使新版本也只读 在目标文件上使用 setReadOnly 方法只会返回 false 表明失败 当然检查文件本身表明它没有设置只读属性 编辑 正如 David Give 所建议的 这
  • 如果存在类似行,如何避免创建新行?

    我需要配置 hibernate 以避免创建重复的行 尽管该行存在 但它会创建一个新行 并且由于仅设置了一个字段 因此将所有其余行设置为 NULL 可以说我有一行如下 id des index age 1 MyName 2 23 虽然我只是将
  • Python 支持零拷贝 I/O 吗?

    我有两个打开的文件对象 dest and src 文件对象dest打开进行写入 查找位置放置在文件内的某个偏移处 并且文件对象src已打开供阅读 我需要做的只是从当前位置读取src到 EOF 并将内容传输到dest尽快 如果我用 Java
  • 在 Java 中使用 Bag 的原因

    我目前正在学习算法和数据结构 当我阅读 算法之书 第四版时 我发现了Bag数据结构与Stack and Queue 阅读了它的解释后 我仍然不清楚为什么我更喜欢使用Bag 其中没有remove 方法 优于其他数据结构 例如Stack Que
  • 用户有很多:用户,或者我必须使用另一种方式来建立基于朋友的社交网络?

    我正在 Rails 中创建一个小型社交网络 人们可以在其中互相添加为朋友 我创建了一个名为 user 其中包含电子邮件 带有密码盐的强 md5 哈希值等 如何创建类似将其他用户添加为好友的选项 是否有可能有类似的东西has many and
  • Firebase 规则允许在不应该写入的情况下进行写入

    I have the following database entry companies 8 我有以下数据库规则 不允许将 companys 8 模拟写入数据库 rules read auth null write auth null c
  • HTML 表单字段是否有命名约定,可以在所有现代浏览器中实现良好的自动完成功能?

    表单字段有命名约定吗 Chrome IE Firefox 寻找哪些领域 我的意思是 适用于所有人 或者至少适用于大多数现代浏览器 我偶然发现 http wonderivelyflawed com 2009 02 17 rails forms
  • 获取日历事件实例

    我正在尝试获取其他重复发生的事件 我认为 uri 是content com android calendar instances但每次我这样做时 我都会收到一个数据库错误 说它不存在 那么如何获取事件实例 以便我可以了解下次设置事件的时间
  • 我应该如何使用 ajax post 将变量发送到 Coldfusion 操作页面?

    我的页面生成随机变量从页面上的 cfquery 用作随机奖品和赢得该奖品的随机员工
  • 将 greensock 与 browserify 结合使用

    我无法让 TweeLite 与 browserify 一起使用 当谈到 CommonJS 时 我是一个极端的菜鸟 我已经使用 Bower 安装了 Gasp v1 13 2 并像这样包含它 var TweenLite require bowe
  • 以编程方式停用 Android 中的设备管理员?

    是否可以通过编程方式停用 第三方 设备管理员 http developer android com guide topics admin device admin html app 我能够使用激活的设备管理员来检索所有应用程序设备策略管理器