我们正在开发适用于 Android 的安全应用程序。用户需要对其设备的文件系统进行加密,但我们必须检查这一事实并禁止使用 app。是否可以检查文件系统是否已加密?还有一些 Android < 3.0 的设备支持加密,例如摩托罗拉 RAZR。了解此类设备上的加密会很有趣。
问问题
10100 次
3 回答
15
只是为了澄清 CommonsWare 的答案,您可以在没有任何 Android 权限的情况下读取设备加密状态。
/**
* Returns the encryption status of the device. Prior to Honeycomb, whole device encryption was
* not supported by Android, and this method returns ENCRYPTION_STATUS_UNSUPPORTED.
*
* @return One of the following constants from DevicePolicyManager:
* ENCRYPTION_STATUS_UNSUPPORTED, ENCRYPTION_STATUS_INACTIVE,
* ENCRYPTION_STATUS_ACTIVATING, ENCRYPTION_STATUS_ACTIVE,
* ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY, ENCRYPTION_STATUS_ACTIVE_PER_USER.
*/
@TargetApi(11)
private static int getDeviceEncryptionStatus(Context context)
{
int status = DevicePolicyManager.ENCRYPTION_STATUS_UNSUPPORTED;
if (Build.VERSION.SDK_INT >= 11) {
final DevicePolicyManager dpm =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm != null) {
status = dpm.getStorageEncryptionStatus();
}
}
return status;
}
请参阅DevicePolicyManager和加密状态标志的文档。
还值得一提的是,Android 已从全盘加密转向基于文件的加密,以支持直接启动等。请参阅基于文件的加密。
于 2013-05-23T22:57:34.280 回答
9
如果您的应用已注册为设备管理员,您可以调用getStorageEncryptionStatus()
以DevicePolicyManager
了解设备的加密状态,API 级别 11 及更高级别。
对于较低 API 级别的任何全设备加密,请联系设备制造商。
于 2012-09-28T13:16:01.310 回答
5
当设备已加密但未启用密码时,澄清先前关于 API < 23getStorageEncryptionStatus()
返回的答案。ENCRYPTION_STATUS_INACTIVE
在 API >= 23 上,它ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY
在这种情况下返回。
于 2016-02-09T13:45:01.323 回答