首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中禁用应用程序为admin之前需要密码。

在Android中禁用应用程序为admin之前需要密码。
EN

Stack Overflow用户
提问于 2013-11-08 10:07:39
回答 1查看 2K关注 0票数 5

我正在开发一个作为Admin运行的应用程序。我可以使用下面的代码来完成它

DemoDeviceAdminReceiver.jav

代码语言:javascript
复制
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");
    }
}

流形

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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上单击admin rights时,如何询问密码。

请帮我解开这个大谜团。谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-03-27 10:35:35

几年后,但我遇到了同样的问题,并能够解决它。也许OP不需要答案,但其他人--比如我--在寻找解决方案时可能会在这个问题上绊倒。

要记住,只有当用户不能解锁屏幕时,这才有效。

您所需要做的就是锁定DeviceAdminReceiver的onDisableRequested方法中的屏幕,这样用户就必须输入他们的密码才能解锁。

请记住,此方法的目的是显示一个警告,解释为什么用户不应该禁用权限。如果返回null (超级默认值),则不会显示任何内容,而且权限也将被禁用。因此,如果我们返回任何文本,将显示带有该文本的对话框以及ok和cancel按钮。

如果将其与屏幕锁结合在一起,如下所示:

代码语言:javascript
复制
public CharSequence onDisableRequested(Context context, Intent intent) {
    DevicePolicyManager deviceManger = (DevicePolicyManager)context.getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    deviceManger.lockNow();
    return "Your warning";
}

当用户试图禁用该权限时,屏幕将关闭,当他们解锁屏幕时,需要输入他们的密码。一旦他们这样做,他们看到一个对话框与您的警告,取消按钮和确定按钮。只有当他们然后按Ok时,权限才会被禁用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19856344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档