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