自己最近在学习Android过程中,下载了一个Demo尽然不能取消设备管理器,也不能卸载。自己猛一想这事如何实现的?
首先AndroidManifest.xml:
<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
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); // Intent i = new Intent(context, MainActivity.class); // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(i); Log.e("autosetting", "receiver onReceive"); } /** * 获取设备存储的数值 * * @param context * @return */ 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, "设备管理:改变密码成功"); } }
核心代码断:
@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文件。