首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Android上的现有设备管理员添加新的使用策略

向Android上的现有设备管理员添加新的使用策略
EN

Stack Overflow用户
提问于 2015-07-09 21:26:06
回答 2查看 2.1K关注 0票数 3

我有一个设备管理应用程序,它使用以下device-admin.xml

代码语言:javascript
复制
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
 <uses-policies>
     <watch-login />
     <reset-password />
     <force-lock />
     <wipe-data />
 </uses-policies>
</device-admin>

某些用户已经激活了设备管理员权限。现在,在应用程序的更新中,我想添加一个新的uses policy

代码语言:javascript
复制
 <limit-password />

我想知道如何检测以编程方式添加了新的使用策略,以便我们推送设备管理权限的重新激活?

EN

回答 2

Stack Overflow用户

发布于 2016-07-04 23:17:21

AFAIK唯一的方法是从apk中读取您的device-admin.xml,您可以这样做(从活动中):

代码语言:javascript
复制
    PackageManager packageManager = getPackageManager();
    List <PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);
    for (PackageInfo packageInfo : packageInfoList) {
        String publicSourceDir = packageInfo.applicationInfo.publicSourceDir;
        if (publicSourceDir.contains("your/app/path")) { // or equals, which you prefer
            File apkFile = new File(publicSourceDir);
            if (apkFile.exists()) {
                try {
                    JarFile jarFile = new JarFile(apkFile);
                    JarEntry jarEntry = jarFile.getJarEntry("xml/device-admin.xml");
                    InputStream is = jarFile.getInputStream(jarEntry);
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    String str;
                    while ((str = br.readLine()) != null) {
                        Log.d("entry: ", str); // your entries in the device-admin.xml
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            break;
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2018-06-01 17:19:20

要检查您的活动管理员是否已授予策略,您可以使用https://developer.android.com/reference/android/app/admin/DevicePolicyManager#hasGrantedPolicy(android.content.ComponentName,%20int)

为了验证是否使用device-admin.xml中的策略,我更喜欢使用https://developer.android.google.cn/reference/android/app/admin/DeviceAdminInfo.html?hl=zh-cn#usesPolicy(int),但是当usesPolicy返回true时,这并不意味着活动管理员可以使用它。

代码语言:javascript
复制
ComponentName componentName = new ComponentName(context, MyDeviceAdminReceiver.class);
ResolveInfo resolveInfo = new ResolveInfo();
resolveInfo.activityInfo = context.getPackageManager().getReceiverInfo(componentName, PackageManager.GET_META_DATA);
DeviceAdminInfo info = new DeviceAdminInfo(context, resolveInfo);

if (info.usesPolicy(DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD)) {
    //your application declared <limit-password/> in device_admin.xml
}

DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm.hasGrantedPolicy(componentName, DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD)) {
    //active device admin has granted <limit-password/> policy
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31318890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档