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