4

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

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

请帮助我解决这个困惑。

4

2 回答 2

8

设备管理员 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");
}
}

此外,在 res->xml->device_admin_uses_policies 中创建一个名为 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>

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

于 2017-03-08T12:22:35.293 回答
0

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

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

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

于 2020-09-09T09:31:13.377 回答