在Android应用程序中使用系统PIN对话框

Vik*_*yan 22 java android

背景

我正在尝试编写一个如下所述的应用程序.

  • 当用户启动应用程序时,它会检查用户是否在其设备上注册了PIN.
  • 如果用户已注册PIN,则应用程序必须显示"继续使用PIN"按钮.
  • 当用户按下"继续使用PIN"按钮时,必须出现系统标准PIN对话框. 在此输入图像描述
  • 用户输入他的PIN并按"继续"按钮.
  • 系统必须检查输入的PIN是否正确并继续工作.

搜索

我已经进行了一些搜索,发现了一些关于stackoverflow和其他互联网资源的文章,上面写着" 没有办法在非根电话上开发新的自定义解锁机制. "或" 如果可能,我会感到惊讶,因为那时你可能会窃取密码,我认为没有人会想要这样. "

此外,我还观看了一些视频教程,如教程:Android内部 - 构建自定义ROM,Pt.1 of 2教程:Android内部 - 构建自定义ROM,Pt.2的2.

EDITED

我今天做了一些搜索,发现了一个非常有趣的事情,我认为我正在寻找解决方案,我希望与你分享我的想法.所以在android源代码中我找到了一个有趣的文件ChooseLockPassword.java(packages\apps\Settings\src\com\android\settings)和LockPatternUtils.java(*frameworks\base\core\java\com\android\internal\widget*)现在我感兴趣的是:

如何LockPatternUtils从我的代码中调用类函数?或者为什么我无法在Eclipse中看到该功能?


决策

所以我认为访问Android 系统PIN对话框的唯一方法是root手机对系统文件进行一些更改并使用系统PIN dialod


  1. 有人可以提供有关在root电话中访问系统PIN对话框的有用链接.
  2. 我是在正确的方式,我能以这种方式解决我的问题吗?
  3. 如果有人遇到这样的问题请帮我解决.

任何方案?

Vik*_*yan 7

好的,我已经解决了这个问题,现在我想和你分享我的解决方案.

起初,因为我告诉我有Android源,所以我已经在android源代码中进行了一些更改,以访问PIN和模式对话框.他们在这里:

〜\ AndroidSources\pakages\apps\Settings\AndroidManifest.xml中我更改了以下代码行

<activity android:name="ConfirmLockPattern"
          android:exported="true"> // This line was added by me.
</activity>

<activity android:name="ConfirmLockPassword"
          android:exported="true" // This line was added by me.
          android:them="@android:style/Them.NoTitleBar">
</activity>

<activity android:name="ChooseLockPattern"
          android:exported="true" // This line was added by me.
          android:label="@string/lockpattern_change_lock_pattern_label">
</activity>
Run Code Online (Sandbox Code Playgroud)

这些修改允许我从我自己的应用程序中调用" ConfirmLockPattern "," ConfirmLockPassword "和" ChooseLockPattern "活动.在我编译android源代码并在我的模拟器上启动system.img之后.

在我的应用程序中,我编写了以下函数,以便调用" ConfirmLockPattern "或" ChooseLockPattern "活动:

/**
 * Show PIN/Password confirmation dialog.
 */
void ShowConfirmLockPINActivity() {
    CustomLog.i(TAG, "Show Confirm Lock PIN Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ConfirmLockPassword"));
    startActivityForResult(intent, mRequestCode);
} /* ShowConfirmLockPINActivity() */

/**
 * Show set PIN/Password dialog.
 */
void ShowSetLockPINActivity() {
    CustomLog.i(TAG, "Show Set Lock PIN Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ChooseLockPassword"));
    startActivityForResult(intent, mRequestCode);
} /* ShowSetLockPINActivity() */

/**
 * Show Pattern Confirmation dialog.
 */
void ShowSetLockPatternActivity() {
    CustomLog.i(TAG, "Show Set Lock Pattern Activity");
    Intent intent = new Intent(Intent.ACTION_RUN);
    intent.setComponent(new ComponentName("com.android.settings",
        "com.android.settings.ConfirmLockPattern"));
    startActivityForResult(intent, mRequestCode);
} /* ShowSetLockPatternActivity() */
Run Code Online (Sandbox Code Playgroud)

  • 这一切都很好,很好.但是,您实际上需要制作自定义ROM吗?这是其他用户的应用程序,还是只供您使用?因为我认为没有人会改变ROM只是为了使用你的应用程序. (5认同)