使用内部android类

时间:2013-07-05 11:25:05

标签: android internal

我想使用android内部类com.android.internal.widget.LockPatternUtils。

我搜索了一些例子,我得到了这个:

LockPatternUtils lpu = new LockPatternUtils(this.getContentResolver());

但是,我无法导入,autimport不会出现并手动执行

import com.android.internal.widget.LockPatternUtils 

不起作用。

这是如何处理的?我认为有一些关于创建界面但不确定它的东西

编辑:我明白了:

  boolean patternLocked = android.provider.Settings.System.getInt(
     getContentResolver(),Settings.System.LOCK_PATTERN_ENABLED, 0)==1;

适用于模式锁,但我不知道引脚或密码锁

3 个答案:

答案 0 :(得分:6)

使用反射来访问内部Android方法getActivePasswordQuality(LockPatternUtils.java的第350行)并将其返回的int与任何DevicePolicyManager Constants的int进行比较:

protected boolean isSecure() {

    String LOCK_PATTERN_UTILS = "com.android.internal.widget.LockPatternUtils";

    try {
        Class<?> lockPatternUtilsClass = Class.forName(LOCK_PATTERN_UTILS);
        Object lockPatternUtils = lockPatternUtilsClass.getConstructor(Context.class).newInstance(this);
        Method method = lockPatternUtilsClass.getMethod("getActivePasswordQuality");
        int lockProtectionLevel = Integer.valueOf(String.valueOf(method.invoke(lockPatternUtils)));

        // Then check if lockProtectionLevel == DevicePolicyManager.TheConstantForWhicheverLevelOfProtectionYouWantToEnforce, and return true if the check passes, false if it fails
    }
    catch (Exception ex) {
        ex.printStackTrace();
    }

    return false;
}

答案 1 :(得分:2)

  

这是如何处理的?

这些类仅作为完整固件版本的一部分提供,而不是来自Android SDK应用程序。

答案 2 :(得分:2)

您不能使用Android内部类,它们不附带公共SDK。

您可以构建自己的SDK,或多或少地公开它们How do I build the Android SDK with hidden and internal APIs available?

不推荐这样做,因为您无法保证。