本身最近在學習Android過程當中,下載了一個Demo盡然不能取消設備管理器,也不能卸載。本身猛一想這事如何實現的? java
首先AndroidManifest.xml: android
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 app
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, "設備管理:改變密碼成功");
- }
-
- }
核心代碼斷: ide
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文件。 spa