设备策略管理器-重置密码-Android 3.0问题
我在Android应用程序中使用设备策略管理器,我的蜂窝设备有问题。当试图调用resetPassword时,抛出了一个异常。这不是Froyo或姜饼的情况,因为两者都很好 错误是: java.lang.RuntimeException:无法启动receiver Package.Name.Test:java.lang.SecurityException:权限拒绝:写入com.android.providers.settings.SettingsProvider uricontent://settings/secure 从pid=x,uid=y需要android.permission.WRITE\u设置 我的Android代码如下:设备策略管理器-重置密码-Android 3.0问题,android,android-3.0-honeycomb,device-admin,Android,Android 3.0 Honeycomb,Device Admin,我在Android应用程序中使用设备策略管理器,我的蜂窝设备有问题。当试图调用resetPassword时,抛出了一个异常。这不是Froyo或姜饼的情况,因为两者都很好 错误是: java.lang.RuntimeException:无法启动receiver Package.Name.Test:java.lang.SecurityException:权限拒绝:写入com.android.providers.settings.SettingsProvider uricontent://settin
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");
}
问题发生在:
mDPM.resetPassword(extra, DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
我的设备\u Admin.xml是:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
<wipe-data />
<reset-password />
</uses-policies>
</device-admin>
就像我说的那样,设备管理员在Froyo和Gingerbread设备上工作得很好,尽管我确实在用户使用不同的键盘时遇到了一些问题,Droid X和HTC Sense就是一个例子。这个问题与时间有关。当我呼叫lockNow时,设备将关闭屏幕,但HTC Sense或MotoBlur在设置、安全、锁定手机后设置的时间之前不会实际锁定键盘
任何帮助都会很棒!我最近刚在I/O上得到一个蜂巢平板电脑,还没有在这个设备上测试过这个应用程序,但我在市场网站上看到了错误,Xoom的用户运行3.0。还没有看到任何3.1设备。我正在研究这个问题(顺便说一句,这在3.1上也很容易重现),但您似乎已经解决了这个问题,基于。我只是想在这里指出,以防其他人试图研究答案 我正在研究这个问题(顺便说一句,在3.1上也很容易重现),但根据这一点,您似乎已经解决了这个问题。我只是想在这里指出,以防其他人试图研究答案 在Android蜂巢3.0平台上,
DevicePolicyServiceManager
与Gingerbread非常不同,resetPassword()
的整个流程是:
DevicePolicyServiceManager.resetPassword() -->
LockPatternUtils.checkPasswordInHistory() -->
LockPatternUtils.passwordToHash() -->
LockPatternUtils.getSalt() -->
LockPatternUtils.putLong(SALT_KEY, salt) -->
Settings.Secure.putLong(SALT_KEY, salt)
在这里你应该知道为什么需要WRITE\u设置
,似乎这是谷歌的错误,他们没有将LockPatternUtils.checkPasswordInHistory()方法放在Binder.clearCallingIndentity()块中
还有一件事,即使您在AndroidManifest.xml
文件中添加WRITE\u设置
权限,它也会告诉您还需要WRITE\u SECURE\u设置
权限
希望谷歌能尽快解决这个问题
另外,这个问题似乎已经在ICS平台上解决了,谷歌已经从resetPassword()块中删除了checkPasswordInHistory()。我认为这不是一个好的解决方案,我不知道为什么?也许他们想尽快发布ICS?在Android蜂巢3.0平台上,DevicePolicyServiceManager
与Gingerbread非常不同,resetPassword()的整个流程是:
DevicePolicyServiceManager.resetPassword() -->
LockPatternUtils.checkPasswordInHistory() -->
LockPatternUtils.passwordToHash() -->
LockPatternUtils.getSalt() -->
LockPatternUtils.putLong(SALT_KEY, salt) -->
Settings.Secure.putLong(SALT_KEY, salt)
在这里你应该知道为什么需要WRITE\u设置
,似乎这是谷歌的错误,他们没有将LockPatternUtils.checkPasswordInHistory()方法放在Binder.clearCallingIndentity()块中
还有一件事,即使您在AndroidManifest.xml
文件中添加WRITE\u设置
权限,它也会告诉您还需要WRITE\u SECURE\u设置
权限
希望谷歌能尽快解决这个问题
另外,这个问题似乎已经在ICS平台上解决了,谷歌已经从resetPassword()块中删除了checkPasswordInHistory()。我认为这不是一个好的解决方案,我不知道为什么?也许他们想尽快发布ICS?我也为此而挣扎。解决方案也列在您的一个链接上,但我在这里也会提到它,以防它对其他人有所帮助
- 如果设备是全新的(或出厂重置),则代码会按照您的描述出现故障
- 如果用户只使用设置菜单输入一次密码,不知何故,相同的代码开始工作并继续工作
真是一只奇怪的虫子 我也为此挣扎。解决方案也列在您的一个链接上,但我在这里也会提到它,以防它对其他人有所帮助
- 如果设备是全新的(或出厂重置),则代码会按照您的描述出现故障
- 如果用户只使用设置菜单输入一次密码,不知何故,相同的代码开始工作并继续工作
真是一只奇怪的虫子 我也面临这个问题,我能告诉你的是,如果你一次也没有手动设置密码,它会给强制关闭请求写入设置权限,但是如果你尝试一次,从那里手动设置密码,它会很有魅力。我也面临这个问题,我能告诉你的是,如果你一次也没有手动设置密码,它会给强制关闭请求写入设置权限,但如果你尝试一次,从那里手动设置密码,它会很有魅力。知道这一点很好。我想你是在xoom上测试的吧?这是迄今为止我见过的最疯狂的虫子。没有多少人使用decice admin API,这并没有真正的帮助,或者如果他们使用,我还没有找到他们。是的。。。除非你正在制作一个像SeekDroid这样的应用程序,其中你想允许某人个人锁定或擦除他们的设备,或者为企业开发一个应用程序,其中你可能想强制某人设置一个强密码以保护敏感的公司信息,否则大多数人永远不会接近这些。实际上。。。我是SeekDroid的开发者。希望谷歌有人能看到这个问题,并在安卓3.1+出现之前解决这个问题。很高兴知道这一点。我想你是在xoom上测试的吧?这是迄今为止我见过的最疯狂的虫子。没有多少人使用decice admin API,或者如果