How can i set up screen lock with a password programmatically?

后端 未结 5 1979
死守一世寂寞
死守一世寂寞 2020-11-28 10:30

Is there any one that can help me with a code to set a password to lock the screen ? thx

5条回答
  •  情话喂你
    2020-11-28 10:47

    Check this . This worked for me.

    LockScreenActivity.java

       package com.kns;
    import android.app.Activity;
    import android.app.ActivityManager;
    import android.app.admin.DevicePolicyManager;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class LockScreenActivity extends Activity implements OnClickListener {
     private Button lock;
     private Button disable;
     private Button enable;
     static final int RESULT_ENABLE = 1;
    
         DevicePolicyManager deviceManger;
         ActivityManager activityManager;
         ComponentName compName;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            deviceManger = (DevicePolicyManager)getSystemService(
              Context.DEVICE_POLICY_SERVICE);
            activityManager = (ActivityManager)getSystemService(
              Context.ACTIVITY_SERVICE);
            compName = new ComponentName(this, MyAdmin.class);
    
            setContentView(R.layout.main);
    
            lock =(Button)findViewById(R.id.lock);
            lock.setOnClickListener(this);
    
            disable = (Button)findViewById(R.id.btnDisable);
            enable =(Button)findViewById(R.id.btnEnable);
            disable.setOnClickListener(this);
            enable.setOnClickListener(this);
        }
    
     @Override
     public void onClick(View v) {
    
      if(v == lock){
        boolean active = deviceManger.isAdminActive(compName);
                 if (active) {
                     deviceManger.lockNow();
                 }
      }
    
      if(v == enable){
       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, RESULT_ENABLE);
      }
    
      if(v == disable){
         deviceManger.removeActiveAdmin(compName);
                  updateButtonStates();
      }  
     }
    
     private void updateButtonStates() {
    
            boolean active = deviceManger.isAdminActive(compName);
            if (active) {
                enable.setEnabled(false);
                disable.setEnabled(true);
    
            } else {
                enable.setEnabled(true);
                disable.setEnabled(false);
            }    
     }
    
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
             switch (requestCode) {
                 case RESULT_ENABLE:
                     if (resultCode == Activity.RESULT_OK) {
                         Log.i("DeviceAdminSample", "Admin enabled!");
                     } else {
                         Log.i("DeviceAdminSample", "Admin enable FAILED!");
                     }
                     return;
             }
             super.onActivityResult(requestCode, resultCode, data);
         }
    }
    

    MyAdmin.java

        package com.kns;
    import android.app.admin.DeviceAdminReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.widget.Toast;
    
    public class MyAdmin extends DeviceAdminReceiver{
    
    
        static SharedPreferences getSamplePreferences(Context context) {
            return context.getSharedPreferences(
              DeviceAdminReceiver.class.getName(), 0);
        }
    
        static String PREF_PASSWORD_QUALITY = "password_quality";
        static String PREF_PASSWORD_LENGTH = "password_length";
        static String PREF_MAX_FAILED_PW = "max_failed_pw";
    
        void showToast(Context context, CharSequence msg) {
            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onEnabled(Context context, Intent intent) {
            showToast(context, "Sample Device Admin: enabled");
        }
    
        @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) {
            showToast(context, "Sample Device Admin: disabled");
        }
    
        @Override
        public void onPasswordChanged(Context context, Intent intent) {
            showToast(context, "Sample Device Admin: pw changed");
        }
    
        @Override
        public void onPasswordFailed(Context context, Intent intent) {
            showToast(context, "Sample Device Admin: pw failed");
        }
    
        @Override
        public void onPasswordSucceeded(Context context, Intent intent) {
            showToast(context, "Sample Device Admin: pw succeeded");
        } 
    
    } 
    

    main.xml

        
    
        
    
        
    
        
    

    policies.xml

    
    
        
            
            
            
            
            
        
    
    

    You can have this policies.xml either in layout or in xml folder. Only thing you need to take care is metadata tag in Androidmanifest file.

     
        
            
    
            
                
                    
                        
                        
                    
                
     
         
                        
             
                            
                        
     
            
    

    Before Lock the screen you need to Enable Admin Permission

    Then you will get this..

    After Enable you will lock screen..like this

提交回复
热议问题