我正在开发一个以Admin
运行的应用程序。
我可以使用以下代码
DemoDeviceAdminReceiver.jav :
public class DemoDeviceAdminReceiver extends DeviceAdminReceiver {
static final String TAG = "DemoDeviceAdminReceiver";
/** 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, R.string.device_admin_enabled, Toast.LENGTH_LONG).show();
Log.d(TAG, "onEnabled");
}
/** Called when disabling device administrator power. */
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
Toast.makeText(context, R.string.device_admin_requesting_disable, Toast.LENGTH_LONG).show();
Log.d(TAG, "onDisableRequested");
return super.onDisableRequested(context, intent);
}
/** 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, R.string.device_admin_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=".DemoDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
</receiver>
RES / XML / device_admin_sample.xml :
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
</uses-policies>
</device-admin>
每件事情都运作良好,但每当用户点击disable the app
的{{1}}时,我都不知道如何申请密码。
请帮助解决这个大谜语。 感谢
答案 0 :(得分:0)
迟了几年,但我遇到了同样的问题并且能够解决它。也许OP不会需要答案,但其他人 - 比如我 - 可能会在寻找解决方案时偶然发现。
请注意,这仅在用户无法解锁屏幕时才有效。
您需要做的就是在DeviceAdminReceiver的onDisableRequested方法中锁定屏幕,以便用户输入密码进行解锁。
请记住,此方法旨在显示警告,说明用户不应禁用权限的原因。如果返回null(默认值为super),则不会显示任何内容,并且无论如何都会禁用该权限。因此,如果我们返回任何文本,将显示包含该文本的对话框以及确定和取消按钮。
如果您将其与屏幕锁定结合使用,如下所示:
public CharSequence onDisableRequested(Context context, Intent intent) {
DevicePolicyManager deviceManger = (DevicePolicyManager)context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
deviceManger.lockNow();
return "Your warning";
}
当用户尝试禁用该权限时,该屏幕将关闭,当他们解锁屏幕时,他们需要输入他们的密码。一旦他们这样做,他们会看到一个带有警告的对话框,取消按钮和一个确定按钮。只有当他们按下确定时才会禁用该权限。