2013-11-08 9 views
5

Я разрабатываю приложение, которое работает как Admin. я в состоянии сделать это, используя следующий кодТребовать пароль перед отключением приложения как администратора в Android

DemoDeviceAdminReceiver.jav:

public class DemoDeviceAdminReceiver extends DeviceAdminReceiver { 
    static final String TAG = "DemoDeviceAdminReceiver"; 

    /** 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, R.string.device_admin_enabled, Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onEnabled"); 
    } 

    /** Called when disabling device administrator power. */ 
    @Override 
    public CharSequence onDisableRequested(Context context, Intent intent) { 
     Toast.makeText(context, R.string.device_admin_requesting_disable, Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onDisableRequested"); 

     return super.onDisableRequested(context, intent); 
    } 

    /** 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, R.string.device_admin_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=".DemoDeviceAdminReceiver" 
    android:permission="android.permission.BIND_DEVICE_ADMIN" > 
    <intent-filter> 
     <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.app.device_admin" 
     android:resource="@xml/device_admin_sample" /> 
</receiver> 

Рез/XML/device_admin_sample.xml:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-policies> 
     <limit-password /> 
     <watch-login /> 
     <reset-password /> 
     <force-lock /> 
     <wipe-data /> 
     <expire-password /> 
     <encrypted-storage /> 
    </uses-policies> 
</device-admin> 

Все прекрасно работает, но я не знаю, как запрашивать пароль, когда пользователь нажимает на disable the app от admin rights.

Помогите решить эту большую загадку. Thanks

+0

Hi chethan do u найдет способ сделать это –

+0

@Kalai G пока нет, если вы найдете какой-либо, сообщите мне. Спасибо –

+0

Так что нужно решение для этого вопроса. Когда пользователь нажимает кнопку ** Деактивировать **, я хочу запросить у пользователя учетные данные администратора, которые будут проверяться с сервера. Если пользователь admin действителен только тогда, администратор будет отключен. Пожалуйста, дайте мне знать, были ли какие-либо успехи в этом отношении. –

ответ

0

Несколько лет спустя, но я просто столкнулся с той же проблемой и смог ее решить. Может быть, OP не понадобится, но другие, как и я, могут наткнуться на это в поисках решения.

Имейте в виду, что это работает только в том случае, если пользователь НЕ может разблокировать экран.

Все, что вам нужно сделать, это заблокировать экран в методе onDisableRequested DeviceAdminReceiver, чтобы пользователь мог ввести свой пароль для разблокировки.

Имейте в виду, что этот метод предназначен для отображения предупреждения, объясняющего, почему пользователю не следует отключать разрешения. Если возвращается null (по умолчанию от super), ничего не отображается и разрешение в любом случае отключено. Поэтому, если мы вернем любой текст, отобразится диалог с этим текстом, а также кнопка ok и отмена.

Если вы объедините это с экрана блокировки, как это:

public CharSequence onDisableRequested(Context context, Intent intent) { 
    DevicePolicyManager deviceManger = (DevicePolicyManager)context.getSystemService(
      Context.DEVICE_POLICY_SERVICE); 
    deviceManger.lockNow(); 
    return "Your warning"; 
} 

экран выключается, когда пользователь пытается отключить разрешение, когда они разблокировать экран, они должны ввести свой пароль , Как только они это сделали, они видят диалог с вашим предупреждением, кнопку отмены и кнопку «ОК». Только если они затем нажмите «ОК», разрешение будет отключено.

Смежные вопросы