public class MainActivity extends Activity {
private final static String LOG_TAG = "DevicePolicyAdmin";
DevicePolicyManager tDevicePolicyManager;
ComponentName tDevicePolicyAdmin;
private CheckBox tAdminEnabledCheckbox;
protected static final int REQUEST_ENABLE = 1;
protected static final int SET_PASSWORD = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_device_policy_admin);
tDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
tDevicePolicyAdmin = new ComponentName(this,
MyDevicePolicyReceiver.class);
tAdminEnabledCheckbox = (CheckBox) findViewById(R.id.checkBox1);
}
@Override
protected void onResume() {
super.onResume();
if (isMyDevicePolicyReceiverActive()) {
tAdminEnabledCheckbox.setChecked(true);
} else {
tAdminEnabledCheckbox.setChecked(false);
}
tAdminEnabledCheckbox
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(
DevicePolicyManager.EXTRA_DEVICE_ADMIN, tDevicePolicyAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, getString(R.string.admin_explanation));
startActivityForResult(intent, REQUEST_ENABLE);
} else {
tDevicePolicyManager
.removeActiveAdmin(tDevicePolicyAdmin);
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// if (resultCode == RESULT_OK) {
// switch (requestCode) {
// case REQUEST_ENABLE:
// Log.v(LOG_TAG, "Enabling Policies Now");
// tDevicePolicyManager.setMaximumTimeToLock(
// tDevicePolicyAdmin, 30000L);
// tDevicePolicyManager.setMaximumFailedPasswordsForWipe(
// tDevicePolicyAdmin, 5);
// tDevicePolicyManager.setPasswordQuality(
// tDevicePolicyAdmin,
// DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
// tDevicePolicyManager.setCameraDisabled(
// tDevicePolicyAdmin, true);
// boolean isSufficient = tDevicePolicyManager
// .isActivePasswordSufficient();
// if (isSufficient) {
// tDevicePolicyManager.lockNow();
// } else {
// Intent setPasswordIntent = new Intent(
// DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
// startActivityForResult(setPasswordIntent, SET_PASSWORD);
// tDevicePolicyManager.setPasswordExpirationTimeout(
// tDevicePolicyAdmin, 10000L);
// }
// break;
// }
// }
DevicePolicyManager t;
t = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
t.lockNow();
}
private boolean isMyDevicePolicyReceiverActive() {
return tDevicePolicyManager
.isAdminActive(tDevicePolicyAdmin);
}
public static class MyDevicePolicyReceiver extends DeviceAdminReceiver {
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "Device Admin Disabled",
Toast.LENGTH_SHORT).show();
}
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, "Device Admin is now enabled",
Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
CharSequence disableRequestedSeq = "Requesting to disable Device Admin";
return disableRequestedSeq;
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
Toast.makeText(context, "Device password is now changed",
Toast.LENGTH_SHORT).show();
DevicePolicyManager localDPM = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName localComponent = new ComponentName(context,
MyDevicePolicyReceiver.class);
localDPM.setPasswordExpirationTimeout(localComponent, 0L);
}
@Override
public void onPasswordExpiring(Context context, Intent intent) {
// This would require API 11 an above
Toast.makeText(
context,
"Device password is going to expire, please change to a new password",
Toast.LENGTH_LONG).show();
DevicePolicyManager localDPM = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName localComponent = new ComponentName(context,
MyDevicePolicyReceiver.class);
long expr = localDPM.getPasswordExpiration(localComponent);
long delta = expr - System.currentTimeMillis();
boolean expired = delta < 0L;
if (expired) {
localDPM.setPasswordExpirationTimeout(localComponent, 10000L);
Intent passwordChangeIntent = new Intent(
DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
passwordChangeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(passwordChangeIntent);
}
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
Toast.makeText(context, "", Toast.LENGTH_SHORT)
.show();
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
Toast.makeText(context, "Access Granted", Toast.LENGTH_SHORT)
.show();
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i(LOG_TAG,
"MyDevicePolicyReciever Received: " + intent.getAction());
super.onReceive(context, intent);
}
}
}
핸드폰 잠금을 틀렸을 때 반응하는 앱을 만들고 있는데, 장치관리자를 활성화하면 핸드폰 잠금을 틀린 걸 확인할 수 있다는 글을 보고 위의 예제를 찾았습니다.
위의 예제를 조금 수정하여 제 앱에 넣으면 끝이기는 한데 이 예제를 실행해보니 권한을 받을 때 모든 데이터 삭제 비밀번호 규칙 설정 같은 저한테 필요없는 권한까지 싹 다 받아오는 것 같더라구요. 제가 만약 사용자라면 저런 메세지가 나오면 불안해서 거절할 것 같은데 필요한 화면 잠금해제 시도 실시간 확인 권한만 받아오고 싶은데 onResume안에 정의된 onCheckChanged 부분을 어떻게 바꾸면 될 것 같은데 뭘 만져야할지 잘 모르겠습니다.
화면잠금해제 시도 실시간 권한만 받아올 순 없을까요?