问题描述
|
由于支持Android 3.0全盘加密,但是我看不到具有该功能的任何API。我需要知道的两件事是:
设备是否已加密?
使用什么加密。
我在这里找到了对该过程的低级解释,似乎表明所使用的加密是使用CBC和ESSIV:SHA256的128 AES,但它并未讨论查找设备是否已加密的方法。
因此,我的应用程序是否可以通过某种方式查询设备是否正在使用全盘加密功能,还是需要诉诸于Runtime.exec调用等骇人的解决方案?
解决方法
正如@Mikle提到的那样,您可以致电
DevicePolicyManager
并询问其状态
@SuppressLint(\"NewApi\")
private boolean isEncrypted(Context context) {
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
int status = devicePolicyManager.getStorageEncryptionStatus();
if (DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE == status) {
return true;
}
}
return false;
}
, 我认为您要查找的API是设备管理API的一部分。具体来说,您需要设置一个DeviceAdminReceiver,并在device_admin.xml的“ uses-policies \”部分中添加一个“ encrypted-storage \”元素。然后,您可以随意调用setStorageEncryption来指示要实施的加密类型。 DeviceAdminSample.java应该为您提供许多您需要的代码。这是一种间接的方式来确定设备是否已加密,但这是我所知道的唯一公共API。
这也不会告诉您正在使用哪种加密方式...我还没有找到用于该目的的API。