and*_*per 5 settings android admin android-intent
Android 应用程序可以使用管理策略获得一些特殊权限,例如打开锁定屏幕。
因此,在用户撤销其管理员权限之前,无法卸载这些应用程序。
我希望有一个功能来检查给定的应用程序(给定应用程序的包名称)是否具有管理员权限,如果是,我将打开此应用程序的管理员设置页面,以允许用户撤销其权限。
事实证明,已经有一个函数可以做到这一点。
首先你得到一个 DevicePolicyManager 的实例:
DevicePolicyManager dpm=(DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE);
Run Code Online (Sandbox Code Playgroud)
然后你应该调用isAdminActive,并得到真/假的结果。
但是,该函数的参数是 ComponentName,这意味着它不仅需要包名称,还需要应用程序特定类的路径。
另一种方法是使用getActiveAdmins查询所有活动的管理应用程序。
稍后,您可以使用以下命令进入管理页面:
final Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.DeviceAdminSettings"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
或者更具体地说,要启用/禁用应用程序管理员权限:
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);
Run Code Online (Sandbox Code Playgroud)
然而,这两种方式似乎有点hacky,因为它们不使用android的官方API,这可能会改变android版本和roms。
检查给定应用程序(包名称)是否具有管理员权限的最佳方法是什么?
进入管理页面的最佳方式是什么?有没有更安全的方法去那里?也许是我对安全屏幕意图所做的回退机制(由于某种原因,我在 API 中找不到)?
阅读这篇文章的答案后,我决定分享调查结果:
如果你想安全,你可以告诉用户自己去管理屏幕,只引导他到安全屏幕:
intent=new Intent(Settings.ACTION_SECURITY_SETTINGS);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但是,我认为下一种方法应该适用于所有设备:
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)
{}
Run Code Online (Sandbox Code Playgroud)
如果失败,您可以随时使用我编写的任何方法,最后,调用安全的方法。
Android 应用程序可以使用管理策略获得一些特殊权限,例如打开/关闭屏幕。
ADevicePolicyManager可以使用 锁定屏幕lockNow()并通过 设置锁定超时setMaximumTimeToLock(),如果这就是您的意思。
检查给定应用程序(包名称)是否具有管理员权限的最佳方法是什么?
看看他们是否在 返回的名单中getActiveAdmins()。该方法会返回null或List的ComponentName对象,你可以调用getPackageName()一个ComponentName比较它的目标包。
进入管理页面的最佳方式是什么?
没有记录和支持的方式来访问设置应用程序的这一部分。最接近的是ACTION_SECURITY_SETTINGS。
| 归档时间: |
|
| 查看次数: |
2335 次 |
| 最近记录: |