Detect Lock Screen Incorrect Password by user in Android
Solution 1
You can set up a DeviceAdminReceiver
that will be notified about failed password attempts, as well as a successful password attempt that occurred after a failed attempt. This is covered in the documentation of Android's device administration APIs.
Note that the user will have to agree to allow your app to serve as a device administrator, via the Settings app, before you will get these events.
This sample project demonstrates listening for those events, plus setting up a password quality policy. The key pieces are:
- the
DeviceAdminReceiver
implementation - the device admin metadata, stating what administrative capabilities your app wants
- the receiver's entry in the manifest
- code in the activity to detect if your app is approved to serve as a device administrator and, if not, lead the user to the spot in Settings to make that change
Solution 2
I am doing the same thing on android studio with API level-22. but nothing is happening . Its showing an error- "Installing com.example.sourav.myfirstapp DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.sourav.myfirstapp" pkg: /data/local/tmp/com.example.sourav.myfirstapp Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]"
Here is my detail of my project - Admin receiver main activity-
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public void onPasswordChanged(Context ctxt, Intent intent) {
DevicePolicyManager mgr=
(DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);
int msgId;
if (mgr.isActivePasswordSufficient()) {
msgId=R.string.compliant;
}
else msgId = R.string.not_compliant;
Toast.makeText(ctxt, msgId, Toast.LENGTH_LONG).show();
}
@Override
public void onPasswordFailed(Context ctxt, Intent intent) {
Toast.makeText(ctxt, "u will never break!", Toast.LENGTH_LONG)
.show();
String tag="tag";
Log.v(tag,"this massage from error" );
}
@Override
public void onPasswordSucceeded(Context ctxt, Intent intent) {
Toast.makeText(ctxt, "good u enterd", Toast.LENGTH_LONG)
.show();
String tag="tag";
Log.v(tag, "this massage from success");
}
}
manifest-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sourav.myfirstapp" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<receiver
android:name="AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
/>
<intent-filter>
<action android:name="android.app.action.ACTION_PASSWORD_FAILED"/>
<action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
</intent-filter>
</receiver>
</application>
</manifest>
Metadata-
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password/>
<watch-login/>
</uses-policies>
Solution 3
First step is to get your app the
DEVICE_ADMIN
privilege by the user.Write your own class which extends
DeviceAdminReceiver
. For this you need to importimport android.app.admin.DeviceAdminReceiver;
-
Override the methods in your case something like:
@Override public void onPasswordFailed(Context context, Intent intent) { Log.d("Hello", "onPasswordFailed"); } @Override public void onPasswordSucceeded(Context context, Intent intent) { Log.d("Hello", "onPasswordSucceeded"); }
user2166895
Updated on June 22, 2022Comments
-
user2166895 almost 2 years
I am building a security app and I need to know if the user is giving incorrect password . Suppose user phone is locked by pattern lock system , and unfortunately user has forgotten the pattern password.When user give wrong pattern 5 time, there will be a penalty for 30 sec . I need to catch that penalty event . In my app, i have to do some task (for the safety of user) when this even come . Please help me,
-
user2166895 about 10 yearsI saw the code, this code introduce a new customize password system, i do not need the whole system , i just need to know that the user has entered a wrong password in his default lock system . Can you help on that. Anyway thanks for answering
-
CommonsWare about 10 years@user2166895: "this code introduce a new customize password system" -- no, it does not. "i just need to know that the user has entered a wrong password in his default lock system . Can you help on that" -- that is covered in my answer.
-
user2166895 about 10 yearsBut the code disable the pattern , slide or pin lock system, i do not want that .
-
CommonsWare about 10 years@user2166895: "But the code disable the pattern , slide or pin lock system" -- I presume that you are referring to the
setPasswordQuality()
call inonEnabled()
. You are welcome to completely remove theonEnabled()
method inAdminReceiver
, along with the corresponding action in the<intent-filter>
. That is not necessary to receive password events. However, it does not "introduce a new customize password system". -
user2166895 about 10 yearsThanks , I got it. But can i get the number of user attempt to access.I mean the number of error .Any code that i should add on this method- ` @Override public void onPasswordFailed(Context ctxt, Intent intent) { Toast.makeText(ctxt, "You will never break into this device!", Toast.LENGTH_LONG) .show(); String tag="tag"; Log.d(tag, "****************This message from Error**************"); }` Thanks again .
-
CommonsWare about 10 years@user2166895: "But can i get the number of user attempt to access.I mean the number of error" -- you will have to track that yourself.
-
user2166895 about 10 yearsHere you are using "minSdkVersion=11", can it be little lower?
-
CommonsWare about 10 years@user2166895: The device admin APIs were added in API Level 8, and the password failed and succeeded actions existed then, so in theory your specific bit should work back to API Level 8. Note that other aspects of the device admin APIs were added later, so check the documentation to see what is and is not available on your desired API level.
-
user2166895 about 10 yearsThanks . It work on API Level 8. Anyway i get what i wanted .
-
Saty almost 9 yearsDevicePolicyManager policyManager = (DevicePolicyManager) ctx.getSystemService(Context.DEVICE_POLICY_SERVICE); returns null, in API 21.... any Idea?
-
Saty almost 9 yearscode.google.com/p/android-developer-preview/issues/… somewhat related to this issue @CommonsWare
-
ffttyy over 8 yearsHi I used your code but I can not remove the application from my phone. I am new and I cant see any code to block removing. Is there any code to disable to remove application from phone? How can I remove it?