安卓中设备管理员有什么用?

4

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

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

请帮助我解决这个困惑。

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");
}
}

此外,创建名为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>

这将作为后台服务运行并通知您。它对我非常有效,希望对您也有用。


设备管理员现在已经过时了吗?选择谷歌支付是否比“MIUI查找我的设备”更有优势? - JinSnow
@Nikhil,我们需要为我的应用程序启用管理员API做些什么?即使我已经实施了这个功能,我仍然收到“无活动管理员”错误。 - Bajrang Hudda

0

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

在旧版Android手机中启用设备管理的应用程序卸载曾经很困难,但在新的Android版本中,这变得更加容易,因为用户将收到一个弹出窗口,指示他禁用授予该应用程序的管理员特权。

要使卸载应用程序变得非常困难,您需要使用最新的Android管理API。组织(在本例中为应用程序开发人员)将控制应用程序,只有他才能解除应用程序的卸载限制。这主要由向其员工提供移动设备并制定严格规则的组织使用,从而强制安装少量应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接