1:寫廣播android
public class MyDeviceReceiver extends DeviceAdminReceiver { @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Log.e("m_tag", "onReceive"); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { //跳離當前詢問是否取消激活的 dialog Intent outOfDialog = context.getPackageManager().getLaunchIntentForPackage("com.android.settings"); outOfDialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(outOfDialog); //調用設備管理器自己的功能,每 100ms 鎖屏一次,用戶即使解鎖也會當即被鎖,直至 7s 後 final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); dpm.lockNow(); new Thread(new Runnable() { @Override public void run() { int i = 0; while (i < 70) { dpm.lockNow(); try { Thread.sleep(100); i++; } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); Log.e("m_tag", "onDisableRequested"); return ""; } }
2:註冊廣播app
<receiver android:name=".MyDeviceReceiver" android:description="@string/receiver_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_manager_policies" /> <intent-filter> <!–此處必須設定該Action,不設定則沒法啓動設備管理器,以前版本可啓動但看不到的bug已被修復–> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
3:在Activity中DevicePolicyManager:ide
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); ComponentName deviceComponentName = new ComponentName("zhy.runan.myapplication", "zhy.runan.myapplication.MyDeviceReceiver"); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceComponentName); this.startActivity(intent);
這樣就能夠實現app不能卸載的功能了,代碼很簡單,有寫的不清楚或錯誤的地方,歡迎留言指正。this