Использовать системный PIN-код в приложении Android
Фон
Я пытаюсь написать приложение, которое работает, как описано ниже.
- Когда пользователь запускает приложение, проверьте, зарегистрировал ли пользователь PIN-код на своем устройстве.
- Если пользователь зарегистрировал PIN-код, приложение должно показать кнопку "Продолжить с PIN-кодом".
- Когда пользователь нажимает кнопку "Продолжить с PIN-кодом", появляется стандартный PIN-код.
![enter image description here]()
- Пользователь вводит свой ПИН-код и нажимает кнопку "Продолжить".
- После того, как система должна проверить правильность введенного PIN-кода или нет и продолжить работу.
Поиск
Я сделал несколько поисков и нашел несколько статей на /qaru.site/... и других интернет-источниках, в которых говорится: Нет способа разработать новый механизм разблокировки на некорневом телефоне. "или Я был бы удивлен, если бы вы могли, потому что тогда вы, вероятно, сможете украсть пин-код, и я не думаю, что кто-то захочет этого..
Также я просмотрел некоторые видеоуроки, такие как Учебник: Android Internals - создание пользовательского ROM, Pt. 1 из 2 и Учебник: Android Internals - создание пользовательского ROM, Pt. 2 из 2.
EDITED
Я сделал некоторые поиски сегодня и нашел очень интересную вещь, я думаю, что я на правильном пути к решению, и я хочу поделиться своими идеями с вами. Поэтому, глядя в источники в Android, я нашел интересные файлы ChooseLockPassword.java (пакеты\apps\Settings\src\com\android\settings) и LockPatternUtils.java (* frameworks\base\core\java\com\android\internal\widget *) теперь я заинтересован в:
Вопрос
Как я могу вызвать функцию класса LockPatternUtils
из моего кода? Или Почему я не вижу эту функцию в Eclipse?
Решение
Поэтому я считаю, что единственный способ получить доступ к диалоговому PIN-коду системы Android - это заставить телефон внести некоторые изменения в системные файлы и использовать PIN-код PIN-кода системы
Вопрос
- Может ли кто-нибудь предоставить мне полезные ссылки о доступе к диалоговому PIN-коду системы на корневом телефоне.
- Я прав, и могу ли я решить свою проблему таким образом?
- Если кто-нибудь столкнулся с такой проблемой, пожалуйста, помогите мне решить.
Любые решения?
Ответы
Ответ 1
Хорошо, я решил эту проблему, и теперь хочу поделиться с вами своим решением.
Сначала, когда я сказал, что у меня есть источники для Android, я сделал некоторые изменения в источниках android, чтобы получить доступ к диалоговым окнам PIN и Pattern. И вот они:
в ~\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" и " 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() */
Ответ 2
Вот некоторые соображения, касающиеся вашего вопроса.
-
Дайвинг глубоко в Android-кодексе - не очень хорошая идея в данном конкретном случае, так как проверка PIN-кода является важной точкой безопасности, и ее механизм должен быть скрытым и хорошо защищенным, чтобы избежать любых злонамеренных намерений.
/li > -
Таким образом, действия, которые вы хотите выполнить (запросить PIN-код, а затем проверить его с помощью реального PIN-кода), запрещены и будут выглядеть как вторжение. Таким образом, вы не должны пытаться получить доступ к хранилищу пользовательских паролей.
-
Правильнее было бы попробовать запустить стандартный PIN-код с помощью Intent
и попросить его сделать всю работу за вас. Однако краткое исследование не дало мне никаких результатов в этом направлении; возможно, вы найдете что-то.
-
Модификация ПЗУ явно тупика - никто не будет мигать телефоном, чтобы установить одно приложение. Требование к корневому телефону немного лучше, есть приложения, которые не могут работать на некорневом телефоне, но все же он перенаправляет нас обратно в точку № 2 (вторжение).
-
Пользователи могут отключить проверку PIN-кода и есть устройства без SIM-карты.
Итак, в соответствии со всеми упомянутыми, я предлагаю вам подумать о другом методе проверки для вашего приложения.