【问题标题】:Checking if password exists and is enabled on lock screen - Android检查密码是否存在并在锁定屏幕上启用 - Android
【发布时间】:2011-09-20 16:45:17
【问题描述】:

有什么方法可以检查您是否以编程方式在您的设备上启用了安卓锁屏密码? 我开始使用 DeviceAdminReceiver 和 DevicePolicyManager 类检查这一点,但这些类不引用以下状态: 1.我有锁屏密码->我删除了密码,现在密码被禁用了。

感谢您的帮助, 尼尔

【问题讨论】:

  • 欢迎来到 Stackoverflow!如果您发现回复有帮助,请投票。如果回复成功回答了您的问题,请点击旁边的绿色复选标记接受答案。也请查看stackoverflow.com/questions/how-to-ask 以获取有关如何写出好问题的建议

标签: android


【解决方案1】:

没有干净的方法可以做到这一点。没有正式的 API。如果你愿意冒险被黑客入侵,你可以试试这个。我将在site 上找到的一些代码拼凑在一起。

boolean hasPasswordOnLockScreen(){
  String sLockPasswordFilename = 
    android.os.Environment.getDataDirectory().getAbsolutePath() + 
    "/system/password.key";
  try {
        // Check if we can read a byte from the file
        RandomAccessFile raf = new RandomAccessFile(filename, "r");
        raf.readByte();
        raf.close();
        return true;
    } catch (FileNotFoundException fnfe) {
        return false;
    } catch (IOException ioe) {
        return false;
    }
}

请注意,这是一个 hack,并且有可能在未来无法工作是密码文件更改的路径和文件名。

【讨论】:

  • 这是一个坏方法,我试过抛出权限被拒绝异常。它还需要root访问权限才能执行此代码
  • 好的。为什么它会变坏?你知道另一种更好的方法吗?我在回复中表示,没有干净、正式的 api 可以做这样的事情。
  • 这很糟糕,因为系统不允许编辑或读取 password.key 文件,即使它是一个黑客,它也不起作用,但通过搜索你的链接我学到了很多。谢谢
【解决方案2】:
       public class ScreenLock {

        private static final String SYSTEM_DIRECTORY = "/system/";
        private static final String LOCK_PATTERN_FILE = "gesture.key";
        private static final String LOCK_PASSWORD_FILE = "password.key";

        public static boolean lockExists() {
            String dataSystemDirectory = Environment.getDataDirectory().getAbsolutePath() + SYSTEM_DIRECTORY;
            String sLockPatternFilename =  dataSystemDirectory + LOCK_PATTERN_FILE;
            String sLockPasswordFilename = dataSystemDirectory + LOCK_PASSWORD_FILE;
            if (nonEmptyFileExists(sLockPatternFilename) || nonEmptyFileExists(sLockPasswordFilename)) {
                return true;
            }
            return false;
        }

        private static boolean nonEmptyFileExists(String filename) {
            File file = new File(filename);
            return file.exists() && file.length() > 0;
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多