Android

android TouchScreen Lock

SOMSOC 2019. 11. 23. 00:01

Android SDK는 개발자에게 특정 API 인 기기 관리 API를 제공하여 사용자가 애플리케이션 내에서 기기 화면을 직접 잠글 수 있도록합니다.

 

1. 전용 XML 정책 파일 만들기

    res/xml/policies.xml

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <force-lock />
    </uses-policies>
</device-admin>


2. 장치 관리 API 사용 선언 : AndroidManifest.xml

 

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

 

3. DeviceAdminReceiver의 서브 클래스 작성

package com.ssaurel.lockdevice;

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class MyAdmin extends DeviceAdminReceiver {

	@Override
	public void onEnabled(Context context, Intent intent) {
		Toast.makeText(context, "Device Admin : enabled", Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onDisabled(Context context, Intent intent) {
		Toast.makeText(context, "Device Admin : disabled", Toast.LENGTH_SHORT).show();
	}
}

 

 

4. 사용자 인터페이스 생성

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:app="http://schemas.android.com/apk/res-auto"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:context="com.ssaurel.lockdevice.MainActivity">

    <Button
    android:id="@+id/lock"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="Lock the Phone"
    android:layout_centerHorizontal="true"/>

    <Button
    android:id="@+id/enableBtn"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="Enable"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/lock"/>

    <Button
    android:id="@+id/disableBtn"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:text="Disable"
    android:layout_centerHorizontal="true"
    android:layout_below="@id/enableBtn"/>

</RelativeLayout>

 

5. 주요 활동의 Java 코드 작성

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button lock, disable, enable;
    public static final int RESULT_ENABLE = 11;
    private DevicePolicyManager devicePolicyManager;
    private ComponentName compName;

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
      compName = new ComponentName(this, MyAdmin.class);

      lock = (Button) findViewById(R.id.lock);
      enable = (Button) findViewById(R.id.enableBtn);
      disable = (Button) findViewById(R.id.disableBtn);
      lock.setOnClickListener(this);
      enable.setOnClickListener(this);
      disable.setOnClickListener(this);
    }

    @Override
    protected void onResume() {
      super.onResume();
      boolean isActive = devicePolicyManager.isAdminActive(compName);
      disable.setVisibility(isActive ? View.VISIBLE : View.GONE);
      enable.setVisibility(isActive ? View.GONE : View.VISIBLE);
    }

// ...
}

6. onActivityResult

...

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

  private Button lock, disable, enable;
  public static final int RESULT_ENABLE = 11;
  private DevicePolicyManager devicePolicyManager;
  private ComponentName compName;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
    compName = new ComponentName(this, MyAdmin.class);

    lock = (Button) findViewById(R.id.lock);
    enable = (Button) findViewById(R.id.enableBtn);
    disable = (Button) findViewById(R.id.disableBtn);
    lock.setOnClickListener(this);
    enable.setOnClickListener(this);
    disable.setOnClickListener(this);
  }

  @Override
  protected void onResume() {
    super.onResume();
    boolean isActive = devicePolicyManager.isAdminActive(compName);
    disable.setVisibility(isActive ? View.VISIBLE : View.GONE);
    enable.setVisibility(isActive ? View.GONE : View.VISIBLE);
  }

  @Override
  public void onClick(View view) {
    if (view == lock) {
      boolean active = devicePolicyManager.isAdminActive(compName);

      if (active) {
        devicePolicyManager.lockNow();
      } else {
        Toast.makeText(this, "You need to enable the Admin Device Features", Toast.LENGTH_SHORT).show();
      }

    } else if (view == 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 we need this permission");
      startActivityForResult(intent, RESULT_ENABLE);

    } else if (view == disable) {
      devicePolicyManager.removeActiveAdmin(compName);
      disable.setVisibility(View.GONE);
      enable.setVisibility(View.VISIBLE);
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
      case RESULT_ENABLE :
        if (resultCode == Activity.RESULT_OK) {
          Toast.makeText(MainActivity.this, "You have enabled the Admin Device features", Toast.LENGTH_SHORT).show();
        } else {
          Toast.makeText(MainActivity.this, "Problem to enable the Admin Device features", Toast.LENGTH_SHORT).show();
        }
      break;
    }
    
	super.onActivityResult(requestCode, resultCode, data);
  }
}

 

 

펌) https://medium.com/@ssaurel/creating-a-lock-screen-device-app-for-android-4ec6576b92e0