【问题标题】:What is a use of device administrator in android?android中的设备管理员有什么用?
【发布时间】:2013-09-29 07:39:51
【问题描述】:

我对设备管理员 api 有疑问/疑问,使用此 API 可以通过任何方式限制我的应用程序的卸载,可能是使用密码。

请告诉我设备管理员 api 究竟是做什么的?我如何在我的应用程序中使用它们?以及如何决定需要设置哪些策略?

请帮助我解决这个困惑。

【问题讨论】:

    标签: android device administrator


    【解决方案1】:

    设备管理员 API 是一种在系统级别提供设备管理功能的 API。这些 API 允许您创建具有安全意识的应用程序。用于使您的应用程序从设备上卸载或在屏幕被锁定时使用相机拍摄图片。

    设备管理 API 支持以下策略,
    1.) 启用密码 - 要求设备要求输入 PIN 或密码。

    2.) 最小密码长度 - 设置密码所需的字符数。例如,您可以要求 PIN 或密码至少包含六个字符。

    3.) 需要字母数字密码 - 要求密码包含字母和数字的组合。它们可能包括符号字符。

    4.) 需要复杂密码 - 要求密码必须至少包含一个字母、一个数字和一个特殊符号。在 Android 3.0 中引入。

    5.) 密码中所需的最少字母 - 所有管理员或特定管理员的密码中所需的最少字母数。在 Android 3.0 中引入。

    6.) 密码中所需的最少小写字母 - 所有管理员或特定管理员的密码中所需的小写字母的最少数量。在 Android 3.0 中引入。

    7.) 密码到期超时 - 密码何时到期,以设备管理员设置到期超时时的毫秒数表示。在 Android 3.0 中引入。

    8.) 最大失败密码尝试次数 - 指定用户在设备擦除其数据之前可以输入错误密码的次数。设备管理 API 还允许管理员远程将设备重置为出厂默认设置。这可以在设备丢失或被盗时保护数据。

    9.) 最长不活动时间锁定 - 设置从用户最后一次触摸屏幕或按下按钮到设备锁定屏幕之前的时间长度。发生这种情况时,用户需要再次输入他们的 PIN 或密码才能使用他们的设备和访问数据。该值可以在 1 到 60 分钟之间。

    10.) 禁用摄像头 - 指定应禁用摄像头。请注意,这不一定是永久禁用。可以根据上下文、时间等动态启用/禁用相机。在 Android 4.0 中引入。

    要在您的应用程序中使用此设备管理器,您应该使用以下代码。您只需将此类添加到您的项目中。

    public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
    
    private static final int CAMERA_REQUEST = 1888;
    private SurfaceView sv;
    private boolean safeToTakePicture = false;
    private int count = 0;
    
    /**
     * method to show toast
     *
     * @param context the application context on which the toast has to be displayed
     * @param msg     The message which will be displayed in the toast
     */
    private void showToast(Context context, CharSequence msg) {
        Log.e("MyDeviceAdminRec...", "::>>>>1 ");
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
    
    @Override
    public void onEnabled(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>2 ");
        showToast(context, "Sample Device Admin: enabled");
    }
    
    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>3 ");
        return "This is an optional message to warn the user about disabling.";
    }
    
    @Override
    public void onDisabled(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>4 ");
        showToast(context, "Sample Device Admin: disabled");
    }
    
    @Override
    public void onPasswordChanged(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>5 ");
        showToast(context, "Sample Device Admin: pw changed");
    }
    
    @Override
    public void onPasswordFailed(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>6 ");
        showToast(context, "Sample Device Admin: pw failed");
    }
    
    @Override
    public void onPasswordSucceeded(Context context, Intent intent) {
        Log.e("MyDeviceAdminRec...", "::>>>>7 ");
        showToast(context, "Sample Device Admin: pw succeeded");
    }
    }
    

    另外,创建一个名为 device_admin_uses_policies 的文件
    res->xml->device_admin_uses_policies 并将以下内容添加到其中。

    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
    </uses-policies>
    

    最后,将此代码添加到清单文件中。

    <receiver
        android:name=".MyDeviceAdminReceiver"
        android:description="@string/app_name"
        android:label="@string/app_name"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin_uses_policies"/>
    
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                <action android:name="android.app.action.ACTION_PASSWORD_CHANGED" />
                <action android:name="android.app.action.ACTION_PASSWORD_FAILED" />
                <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED" />
            </intent-filter>
        </receiver>
    

    它将作为后台服务工作并通知您。它对我很有用。我希望它也对你有用。

    【讨论】:

    • 设备管理员现在折旧了吗?选择 Google Pay 而不是“MIUI 查找我的设备”有优势吗?
    • @Nikhil 在我的应用中启用管理 API 需要做什么?即使在实施此操作后,我也会收到“No Active Admin”错误。
    【解决方案2】:

    设备管理是获取应用程序管理员访问权限和访问功能的旧方法,否则这些功能将不可用,例如登录失败通知、更改密码和锁定屏幕。

    在旧版本的 Android 手机中卸载启用了设备管理员的应用程序过去很困难,但在新的 Android 版本中,用户会收到一个弹出窗口,指示他禁用授予该应用程序的管理员权限。

    要使卸载应用变得非常困难,您需要使用最新的 Android 管理 API。组织(在这种情况下为应用程序开发人员)将控制应用程序,只有他可以取消阻止应用程序以进行卸载。这主要由为员工提供移动设备的组织使用,并且具有严格的管理规则,强制安装少量应用程序。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 1970-01-01
      • 2013-08-02
      • 2014-03-07
      • 2016-03-12
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多