首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设备策略管理器-重置密码-Android3.0问题

设备策略管理器-重置密码-Android3.0问题
EN

Stack Overflow用户
提问于 2011-05-22 01:59:14
回答 4查看 4.8K关注 0票数 1

我在我的Android应用程序中使用设备策略管理器(),而且我对蜂窝设备有一个问题。当试图调用resetPassword时,会抛出一个异常。弗罗约或姜饼的情况并非如此,因为这两种情况都很好。

错误是:

com.android.providers.settings.SettingsProvider : java.lang.RuntimeException:无法启动接收方Package.Name.Test: java.lang.SecurityException:权限拒绝:编写pid=x uri内容/设置/从pid=x安全,uid=y需要android.permission.WRITE_SETTINGS

我的Android代码如下:

代码语言:javascript
复制
DevicePolicyManager mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);

if ((mDPM.getActiveAdmins() != null) && (mDPM.isAdminActive(new ComponentName(context, DeviceAdmin.class)))) {
    mDPM.resetPassword(extra, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
    mDPM.lockNow();
} else {
    Log.d(TAG, "Could not lock because device admin not enabled");
}

问题发生在:

代码语言:javascript
复制
mDPM.resetPassword(extra, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);

我的Device_Admin.xml是:

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

就像我说过的,设备管理在Froyo和姜饼设备上非常有效,尽管我在用户使用不同的键盘保护时确实有一些问题,一个例子是Droid和HTC Sense。这个问题与时间有关。当我打电话给lockNow时,设备会关闭屏幕,但HTC感觉或MotoBlur实际上不会锁定键盘保护,直到设置设置、安全、锁定电话之后的时间。

任何帮助都是很棒的!我最近刚在I/O上买了一款蜂窝平板电脑,还没有在这个设备上测试应用程序,但我在市场网站上看到了Xoom运行3.0的用户出现的错误。还没有看到任何3.1设备。

EN

回答 4

Stack Overflow用户

发布于 2011-12-20 03:52:49

我也和这个做过斗争。解决方案也列出在您的一个链接,但我将在这里提及它,以防它帮助其他人。

  • 如果设备是全新的(或工厂重置),代码将如您所述失败。
  • 如果用户只使用“设置”菜单输入密码一次,那么相同的代码就会开始工作并继续工作。

真是个奇怪的虫子!!

票数 2
EN

Stack Overflow用户

发布于 2011-11-02 15:55:31

在安卓蜂窝3.0平台上,DevicePolicyServiceManager与姜饼有很大的不同,整个resetPassword()流程如下:

代码语言:javascript
复制
DevicePolicyServiceManager.resetPassword() --> 
LockPatternUtils.checkPasswordInHistory() --> 
LockPatternUtils.passwordToHash() --> 
LockPatternUtils.getSalt() --> 
LockPatternUtils.putLong(SALT_KEY, salt) --> 
Settings.Secure.putLong(SALT_KEY, salt)

在这里,您应该知道为什么需要WRITE_SETTINGS,似乎--这是谷歌的错误--,他们没有将LockPatternUtils.checkPasswordInHistory()方法放在Binder.clearCallingIndentity()块中。

还有一件事,即使在您的WRITE_SETTINGS文件中添加了AndroidManifest.xml权限,它也会告诉您WRTITE_SECURE_SETTINGS权限也是必需的。

希望谷歌能尽快解决这个问题。

这个问题似乎已经在ICS平台上解决了,谷歌已经将checkPasswordInHistory()从resetPassword()块中删除了。我不认为这是一个很好的解决方案,我不知道为什么?也许他们想尽快释放ICS?

票数 1
EN

Stack Overflow用户

发布于 2012-02-20 11:48:02

我也面临着这个问题,我能告诉你的是,如果你没有手动设置密码,即使是一次,它也会强制关闭请求write_settings许可,但如果你尝试通过手动设置密码从那里开始,它将像魅力一样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6085580

复制
相关文章

相似问题

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