Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to make my application device administrator in android?

I am trying to make my application device administrator , i followed some notes provided on the same at Device admin SAMPLE notes or TUTORIAL here but still could not implement it.

Can some one plz point out a working example of the same , i just need to make sure that to uninstall the application , user needs to enter the password which is set in my application.

Any help will be useful , Thanks in advance

like image 443
rolling.stones Avatar asked Jun 12 '12 10:06

rolling.stones


2 Answers

You cannot activate it programmatically but you can ask user to enable it at runtime Here is the complete solution

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

call this method in oncreate where ever it is needed

// call this method to check if its enabled or not

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

    }

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

}

manifest

<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/device_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>
like image 58
Quick learner Avatar answered Sep 20 '22 20:09

Quick learner


i just need to make sure that to uninstall the application , user needs to enter the password which is set in my application.

Fortunately, this is not possible for an SDK application. Even a device admin app cannot prevent the user from uninstalling it.

like image 42
CommonsWare Avatar answered Sep 21 '22 20:09

CommonsWare