我在我的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代码如下:
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);我的Device_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和姜饼设备上非常有效,尽管我在用户使用不同的键盘保护时确实有一些问题,一个例子是Droid和HTC Sense。这个问题与时间有关。当我打电话给lockNow时,设备会关闭屏幕,但HTC感觉或MotoBlur实际上不会锁定键盘保护,直到设置设置、安全、锁定电话之后的时间。
任何帮助都是很棒的!我最近刚在I/O上买了一款蜂窝平板电脑,还没有在这个设备上测试应用程序,但我在市场网站上看到了Xoom运行3.0的用户出现的错误。还没有看到任何3.1设备。
发布于 2011-12-20 03:52:49
我也和这个做过斗争。解决方案也列出在您的一个链接,但我将在这里提及它,以防它帮助其他人。
真是个奇怪的虫子!!
发布于 2011-11-02 15:55:31
在安卓蜂窝3.0平台上,DevicePolicyServiceManager与姜饼有很大的不同,整个resetPassword()流程如下:
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?
发布于 2012-02-20 11:48:02
我也面临着这个问题,我能告诉你的是,如果你没有手动设置密码,即使是一次,它也会强制关闭请求write_settings许可,但如果你尝试通过手动设置密码从那里开始,它将像魅力一样工作。
https://stackoverflow.com/questions/6085580
复制相似问题