自己最近在学习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文件。
相关推荐
在Android开发中,创建一个类似QQ相册的选择器是...以上就是“android仿QQ相册选择器”项目可能涉及到的主要技术点,每个点都可以进一步细化和深入学习,对于Android开发者来说,这些都是提升应用用户体验的重要技能。
遇到错误时,例如"No classfiles specified"或"Conversion to Dalvik format failed with error 1",可能需要清理项目("Project" -> "Clean")或禁用自动构建("Project" -> 取消勾选"Build Automatically")。...
- **打开AVD Manager**:通过Tools -> AVD Manager打开虚拟设备管理器。 - **创建新设备**:点击“Create Virtual Device…”创建新的虚拟设备。 - **配置虚拟设备**:选择设备规格、Android API版本以及其他配置...
安装完成后,接下来创建Android Virtual Device (AVD),这是一个软件模拟的Android设备,用于测试应用。在"Android SDK and AVD Manager"中选择"Virtual Devices",然后点击"New"。你需要设定AVD的名称,选择目标API...
考虑到Android设备的多样性,实现的代码需要考虑到不同Android版本的兼容性问题。例如,某些API级别的SharedPreferences可能有差异,加密库的使用也需要确保能在低版本系统上运行。 8. **最佳实践**: 在实际开发...
- **步骤4**:取消勾选`Show only the latest versions of available software`,以便能看到所有可用版本。 - **步骤5**:找到并选中`ADT Plugin for Eclipse`,点击`Next`继续。 - **步骤6**:阅读并接受许可协议,...
如果你只是想暂时阻止日历同步,而不想永久删除账户,可以在完成上述步骤后,再次进入同步设置,重新勾选“日历”,以恢复同步。 在“咨询课程.html”和“咨询课程_files”这两个文件中,可能包含了更详细的教程或...
工具栏中包含一些频繁使用的文本操作按钮(例如,剪切、复制、粘贴、撤销、重做),以及各种各样的管理器按钮(如 SDK 管理器、Android 虚拟设备管理器),还有运行和调试应用程序的按钮。工具栏中所有的按钮都有...
- 在资源管理器中取消勾选“隐藏受保护的系统文件”,显示隐藏的系统文件和分区。 - 使用Windows自带的磁盘管理器确认活动主分区的位置。 - 如果发现活动主分区未分配盘符,则需为其分配盘符,以便于后续操作。 ...
Android虚拟机环境的建立对于开发者和爱好者来说是至关重要的,它允许用户在不购买实际设备的情况下,进行应用开发、系统测试和功能验证。 首先,为了运行Android虚拟机,我们需要确保系统已经安装了Java Runtime ...
3. 在“Eclipse”-> “首选项”-> “Android”-> “构建”中取消勾选“Skip packaging and dexing until export or launch....”选项,以确保每次构建都会生成apk。 此外,还有其他可能的解决方案,如: 1. 删除...
最后,进行广泛的兼容性测试,确保该功能在不同版本的Android系统以及各种品牌和型号的设备上都能正常工作。 通过上述步骤,你可以构建一个类似微信的Android相册多选功能。在实际开发过程中,还需要根据项目需求...
在Android平台上,实现图片多选功能是常见的需求,特别是在社交应用、相册应用或文件管理器中。这个“安卓图片多选相关-Android发送多张图片.rar”压缩包可能包含了实现这一功能的相关代码示例。下面,我们将深入...
在Android应用开发中,数据存储是至关重要的一个环节,它涉及到用户信息的持久化,使得应用在退出或设备重启后仍能保持之前的状态。在众多的数据存储方式中,SharedPreferences是一种轻量级的选择,尤其适用于存储小...
在移动设备上,如智能手机和平板电脑,用户经常需要从相机或相册中选择多张图片进行分享、编辑或其他操作。这个过程涉及到一系列的技术实现,包括图像处理、用户界面设计和多选功能的实现。以下将详细介绍这个过程中...
在Android开发中,"记住密码"和"自动登录"功能是常见的用户便利性设计,它允许用户在登录应用后选择保存其凭据,以便在下次打开应用时无需再次输入。这个"android记住密码自动登录实例"应该包含了实现这一功能的具体...
在Android中,图片通常存储在设备的外部存储(SD卡)或者内部存储的特定目录下,如DCIM、Pictures等。Android提供了MediaStore内容提供者,用于访问这些多媒体文件。在自定义相册时,我们需要查询MediaStore来获取...
启动动画结束后,Android的主屏幕将显现出来,此时你可以开始操作模拟器,就像在真实的Android设备上一样。 通过Android模拟器,你可以安装APK文件,测试应用程序,或者只是简单地体验Android系统的各种功能。此外...
您可以在设置中找到“应用管理器”或类似选项,然后查看每个应用所占用的资源情况,并根据实际情况选择禁用非核心功能。此外,安装第三方任务管理工具(如Advanced Task Killer)也能帮助更好地控制这些进程,进一步...