我正在尝试编写一个如下所述的应用程序。
我进行了一些搜索,发现stackoverflow和其他互联网资源上的一些文章说“ There is no way to develop a new custom unlock mechanism on a non-rooted phone. ”或“{{3 }}”。
此外,我还观看了一些视频教程,例如I would be surprised if you could, because then you would be probably able to steal the pin code, and I don't think anyone would want that.和Tutorial: Android Internals - Building a Custom ROM, Pt. 1 of 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拨号
任何解决方案?
答案 0 :(得分:7)
好的,我已经解决了这个问题,现在我想和你分享我的解决方案。
首先,因为我告诉我有安卓源,所以我在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>
此修改允许我调用“ ConfirmLockPattern ”,“ ConfirmLockPassword ”和“ < em> 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() */
答案 1 :(得分:3)
以下是您的问题的一些注意事项。
在这种特殊情况下深入了解Android代码并不是一个好主意,因为验证PIN码是一个重要的安全点,其机制必须隐藏并受到良好保护以避免任何恶意。
< / LI>因此,您要执行的操作(请求PIN然后根据真实PIN码进行检查)是禁止的,并且看起来像是入侵。因此,您不应该尝试访问用户密码的存储。
尝试通过某些Intent
启动标准PIN屏幕并要求它为您完成所有工作更为正确。但是,简短的调查没有给我这方面的任何结果;或许,你会找到一些东西。
修改ROM显然是死路一条 - 没有人会闪存手机来安装一个应用程序。要求root手机好一点,有些应用程序无法在非root手机上运行,但它仍会将我们转发到第2点(入侵)。
用户可以停用PIN检查和there are devices with no SIM。
所以,根据提到的所有内容,我建议你为自己的应用考虑不同的验证方法。
答案 2 :(得分:1)
从API级别21开始,KeyguardManager.createConfirmDeviceCredentialIntent
可用于使用设备锁定销来验证当前用户。
请参见usage example。