¿Cómo hacer que mi dispositivo de aplicación sea administrador en Android?

Estoy tratando de hacer que mi dispositivo de aplicación sea administrador, seguí algunas notas provistas en el mismo en Notas de MUESTRA del administrador del dispositivo or TUTORIAL aquí pero aun así no pude implementarlo.

¿Puede alguien señalar un ejemplo práctico de lo mismo? Solo necesito asegurarme de que para desinstalar la aplicación, el usuario debe ingresar la contraseña que está configurada en mi aplicación.

Cualquier ayuda será útil, gracias de antemano

preguntado el 12 de junio de 12 a las 11:06

suena más a malware que a una aplicación útil si no permite eliminarlo, ¿verdad? -

básicamente como un control parental, por lo que el niño no podrá eliminar la aplicación a menos que el padre inserte la contraseña. -

3 Respuestas

Solo necesito asegurarme de que para desinstalar la aplicación, el usuario debe ingresar la contraseña que está configurada en mi aplicación.

Afortunadamente, esto no es posible para una aplicación SDK. Incluso una aplicación de administración de dispositivos no puede evitar que el usuario la desinstale.

Respondido el 12 de junio de 12 a las 12:06

La aplicación Cerberus lo hace. La aplicación es administrador del dispositivo, si el usuario no marca una opción en el menú, no podrá desinstalar la aplicación. ¿Como hacer esto? - gabriel augusto

@GabrielAugusto: Gracias por señalar una falla de seguridad de Android. Intentaré confirmar sus hallazgos, luego trabajaré con el equipo de seguridad de Android para corregir esta falla. - CommonsWare

@CommonsWare: Ha mencionado que no es posible para SDK aplicaciones Entonces, ¿es posible para las aplicaciones del sistema? ¿Puedo crear una aplicación del sistema que esté protegida con contraseña y el usuario no pueda desinstalarla? - user1010

@user1010: si es una aplicación del sistema, el usuario no puede desinstalarla, punto, a menos que tenga root. - CommonsWare

oh sí, cómo puedo olvidar eso. - user1010

Encontré el tutorial de muestra. aquí. Espero que te ayude.

advertencia :::: Si hace clic en "Restablecer dispositivo", su dispositivo se restablecerá de fábrica debido a

devicePolicyManager.wipeData(ACTIVATION_REQUEST);

Respondido 09 Oct 14, 05:10

No puede activarlo mediante programación, pero puede pedirle al usuario que lo habilite en tiempo de ejecución Aquí está la solución completa

 var devicePolicyManager: DevicePolicyManager? = null
    var deviceAdmin: ComponentName? = null

llame a este método en oncreate donde sea necesario

// llamar a este método para verificar si está habilitado o no

checkAndTakeUserToEnableEnableAdminApp()



private fun checkAndTakeUserToEnableEnableAdminApp() {
        devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
        deviceAdmin = ComponentName(this, DeviceAdminReceiverClass::class.java)
        if (devicePolicyManager!!.isAdminActive(deviceAdmin!!)) {
        //do whatever is needed here is its active
        } else {
            showDeviceAdminPopup(this)
        }

    }

Dónde DeviceAdminReceiverClass

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;



/**
 * This is the component that is responsible for actual device administration.
 * It becomes the receiver when a policy is applied. It is important that we
 * subclass DeviceAdminReceiverClass class here and to implement its only required
 * method onEnabled().
 */
public class DeviceAdminReceiverClass extends DeviceAdminReceiver {
    static final String TAG = "DeviceAdminReceiverClass";

    /** 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, "Device admin is enabled",
                Toast.LENGTH_LONG).show();
        Log.d(TAG, "onEnabled");
    }

    /** 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, "Device admin is 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");
    }

}

manifiesto

<receiver
            android:name=".DeviceAdminReceiverClass"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <intent-filter>

                <!-- This action is required -->
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>

            <!-- This is required this receiver to become device admin component. -->
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />
        </receiver>

@xml/dispositivo_admin

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"
    android:visible="false">
    <uses-policies>
        <watch-login />
        <force-lock />
    </uses-policies>
</device-admin>

Respondido el 05 de junio de 21 a las 07:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.