您不能以编程方式激活它,但您可以要求用户在运行时启用它
这是完整的解决方案
var devicePolicyManager: DevicePolicyManager? = null
var deviceAdmin: ComponentName? = null
在需要时在 oncreate 中调用此方法
//调用此方法检查是否启用
checkAndTakeUserToEnableEnableAdminApp()
private fun checkAndTakeUserToEnableEnableAdminApp() {
devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
deviceAdmin = ComponentName(this, DeviceAdminReceiverClass::class.java)
if (devicePolicyManager!!.isAdminActive(deviceAdmin!!)) {
//do whatever is needed here is its active
} else {
showDeviceAdminPopup(this)
}
}
在哪里DeviceAdminReceiverClass
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
/**
* This is the component that is responsible for actual device administration.
* It becomes the receiver when a policy is applied. It is important that we
* subclass DeviceAdminReceiverClass class here and to implement its only required
* method onEnabled().
*/
public class DeviceAdminReceiverClass extends DeviceAdminReceiver {
static final String TAG = "DeviceAdminReceiverClass";
/** Called when this application is approved to be a device administrator. */
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
Toast.makeText(context, "Device admin is enabled",
Toast.LENGTH_LONG).show();
Log.d(TAG, "onEnabled");
}
/** Called when this application is no longer the device administrator. */
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
Toast.makeText(context, "Device admin is disabled",
Toast.LENGTH_LONG).show();
Log.d(TAG, "onDisabled");
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
super.onPasswordChanged(context, intent);
Log.d(TAG, "onPasswordChanged");
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
super.onPasswordFailed(context, intent);
Log.d(TAG, "onPasswordFailed");
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
super.onPasswordSucceeded(context, intent);
Log.d(TAG, "onPasswordSucceeded");
}
}
清单
<receiver
android:name=".DeviceAdminReceiverClass"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<intent-filter>
<!-- This action is required -->
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
<!-- This is required this receiver to become device admin component. -->
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
</receiver>
@xml/device_admin
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"
android:visible="false">
<uses-policies>
<watch-login />
<force-lock />
</uses-policies>
</device-admin>