Sanjay Joshi Sanjay Joshi - 9 days ago 5
Android Question

How to lock/unlock phone programmatically : Android

In my application, I need to lock and unlock phone. I searched for it, I found many answers, I tried them but no one is working.

I need to unlock phone on

onCreate()
and lock phone again while I'm finishing my activity.

Do you guys know any method to do the same?

Thanks friends.

EDIT:

Some links, that I have tried are:

How my app can unlock screen programatically?

Android screen lock/ unlock programatically

https://groups.google.com/forum/#!topic/android-developers/BOLjJTMO4zE

In my application I'm scheduling a task using
AlarmManager
and then enabling the phone lock. My activity is getting started on scheduled time but it not unlocking my phone. when I'm unlocking my phone manually running activity is getting appeared

Answer
DevicePolicyManager deviceManger;
ActivityManager activityManager;
ComponentName compName;

add code in onCreate()

deviceManger = (DevicePolicyManager)getSystemService(
            Context.DEVICE_POLICY_SERVICE);
activityManager = (ActivityManager)getSystemService(
            Context.ACTIVITY_SERVICE);
compName = new ComponentName(this, DeviceAdminLock.class);

add code in manifest file

<receiver android:name=".DeviceAdminLock"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
</receiver>

Create an xml resource file in res/xml as device_admin_sample.xml and add the following -

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>

Add permissions in manifest file -

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>

Create one receiver class which extends DeviceAdminReceiver class.

public class DeviceAdminLock extends DeviceAdminReceiver {

@Override
public void onEnabled(Context context, Intent intent) {
}

@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
    return "This is an optional message to warn the user about disabling.";
}

@Override
public void onDisabled(Context context, Intent intent) {
}

@Override
public void onPasswordChanged(Context context, Intent intent) {
}

@Override
public void onPasswordFailed(Context context, Intent intent) {
}

@Override
public void onPasswordSucceeded(Context context, Intent intent) {
}

}

ask activate lock permission in activity class

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,compName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"Additional text explaining why this needs to be added.");
startActivityForResult(intent, 1);

check permission is given or not

boolean active = deviceManger.isAdminActive(compName);
if (active) {
// if available then lock
  deviceManger.lockNow();
}

unlock device

deviceManger.removeActiveAdmin(compName);

To Unlock

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); 
final KeyguardManager.KeyguardLock kl = km .newKeyguardLock("MyKeyguardLock"); 
kl.disableKeyguard(); 

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                                 | PowerManager.ACQUIRE_CAUSES_WAKEUP
                                 | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();
Comments