自己最近在学习Android过程中,下载了一个Demo尽然不能取消设备管理器,也不能卸载。自己猛一想这事如何实现的?
首先AndroidManifest.xml:
 
Xml代码 
 ![]()
class="star" src="/Upload/Images/2014112518/40B102E0EF997EA6.png" alt="收藏代码" />
- <receiver  
-             android:name="com.dean.autosetting.DeviceMyReceiver"  
-             android:description="@string/description"  
-             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" />  
-   
-             <intent-filter>  
-                 <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />  
-                 <action android:name="android.intent.action.BOOT_COMPLETED" />  
-   
-                 <category android:name="android.intent.category.HOME" />  
-             </intent-filter>  
-         </receiver>  
 DeviceMyReceiver.java
 
Java代码 
  
- package com.dean.autosetting;  
-   
- import android.app.admin.DeviceAdminReceiver;  
- import android.content.Context;  
- import android.content.Intent;  
- import android.content.SharedPreferences;  
- import android.util.Log;  
- import android.widget.Toast;  
-   
- public class DeviceMyReceiver extends DeviceAdminReceiver {  
-   
-     @Override  
-     public void onReceive(Context context, Intent intent) {  
-         super.onReceive(context, intent);  
-         
-         
-         
-         Log.e("autosetting", "receiver onReceive");  
-     }  
-   
-     
-     public static SharedPreferences getDevicePreference(Context context) {  
-         return context.getSharedPreferences(DeviceMyReceiver.class.getName(), 0);  
-     }  
-   
-     
-     public static String PREF_PASSWORD_QUALITY = "password_quality";  
-     
-     public static String PREF_PASSWORD_LENGTH = "password_length";  
-   
-     public static String PREF_MAX_FAILED_PW = "max_failed_pw";  
-   
-     void showToast(Context context, CharSequence text) {  
-         Toast.makeText(context, text, Toast.LENGTH_SHORT).show();  
-     }  
-   
-     @Override  
-     public void onEnabled(Context context, Intent intent) {  
-         showToast(context, "设备管理:可用");  
-     }  
-   
-     @Override  
-     public void onDisabled(Context context, Intent intent) {  
-         showToast(context, "设备管理:不可用");  
-     }  
-   
-     @Override  
-     public CharSequence onDisableRequested(Context context, Intent intent) {  
-         
-         Intent intent2 = new Intent(context, NoticeSetting.class);  
-         intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
-         context.startActivity(intent2);  
-         context.stopService(intent);
-         return ""; 
-     }  
-   
-     @Override  
-     public void onPasswordChanged(Context context, Intent intent) {  
-         showToast(context, "设备管理:密码己经改变");  
-     }  
-   
-     @Override  
-     public void onPasswordFailed(Context context, Intent intent) {  
-         showToast(context, "设备管理:改变密码失败");  
-     }  
-   
-     @Override  
-     public void onPasswordSucceeded(Context context, Intent intent) {  
-         showToast(context, "设备管理:改变密码成功");  
-     }  
-   
- }  
 核心代码断:
Java代码 
  
- @Override  
-     public CharSequence onDisableRequested(Context context, Intent intent) {  
-         
-         Intent intent2 = new Intent(context, NoticeSetting.class);  
-         intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
-         context.startActivity(intent2);  
-         context.stopService(intent);
-         return ""; 
-     }  
 核心为 onDisableRequested方法可以做很作操作。正常情况下是取消勾选时,提示用户一句话。这里  context.stopService(intent);我把设置界面给关了。然后呢 跳转到我制定死机界面 NoticeSetting。NoticeSetting界面按键任何都不管用,只能重启。。
 
PS: 只是学习,不建议大家做流氓软件。本人自己也很抵触。学习之中,如果大家有问题欢迎留言,或者版本兼容问题。共同学习。 大家如果遇到这样的软件,可以用比较权威的软件卸载,如果还卸载不了,可以Root后,直接到app文件夹中删除apk文件。