Android 防卸载实现代码。

来源:互联网 发布:智能男友聊天软件 编辑:程序博客网 时间:2024/06/06 02:22

实现防卸载首先需要激活设备管理器。激活 设备管理器后应用将无法正常卸载,取消激活后可即可正常卸载。

所以我们要禁止用户取消激活。


激活设备管理器请参考:http://www.oschina.net/question/54100_29057


由于app注册了android.app.action.DEVICE_ADMIN_ENABLED的广播接受,所以当用户将要点击取消激活时系统会调用app中注册android.app.action.DEVICE_ADMIN_ENABLED实现类中的onDisableRequested方法。

我们可以在应用的onDisableRequested方法中添加以下代码阻止用户取消激活:





1、通过锁屏方式


@Override   

  1. public  CharSequence onDisableRequested(Context context, Intent intent) {  
  2.      // TODO Auto-generated method stub   
  3.         Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );  
  4.         intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  5.     context.startActivity(intent1);  
  6.         final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);  
  7.        dpm.lockNow();  
  8.         new  Thread( new  Runnable() {            
  9.          @Override   
  10.          public   void  run() {  
  11.              int  i =  0 ;  
  12.              while (i< 70 ){  
  13.                 dpm.lockNow();  
  14.                  try  {  
  15.                     Thread.sleep( 100 );  
  16.                     i++;  
  17.                 }  catch  (InterruptedException e) {  
  18.                     e.printStackTrace();  
  19.                 }  
  20.             }  
  21.         }  
  22.     }).start();  
  23.      return   "This is a onDisableRequested response message" ;  
  24. }  

2 、通过阻塞函数返回方式


  1. @Override   
  2. public  CharSequence onDisableRequested(Context context, Intent intent) {  
  3.      // TODO Auto-generated method stub   
  4.         Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );  
  5.         intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  6.     context.startActivity(intent1);  
  7.         try  {  
  8.         Thread.sleep( 7000 );  
  9.     }  catch  (InterruptedException e) {  
  10.         e.printStackTrace();  
  11.     }  
  12.      return   "This is a onDisableRequested response message" ;  
  13. }  

3 、通过透明窗口劫持方式


  1. @Override   
  2. public  CharSequence onDisableRequested(Context context, Intent intent) {  
  3.      // TODO Auto-generated method stub   
  4.         Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );  
  5.         intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  6.     context.startActivity(intent1);  
  7.     WindowManager.LayoutParams wmParams;  
  8.      final  WindowManager mWindowManager;  
  9.     wmParams =  new  WindowManager.LayoutParams();  
  10.     mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);  
  11.     wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;   
  12.        wmParams.format = PixelFormat.RGBX_8888;   
  13.        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        
  14.        wmParams.gravity = Gravity.LEFT | Gravity.TOP;  
  15.        wmParams.alpha =  0 ;  
  16.        wmParams.x =  0 ;  
  17.        wmParams.y =  0 ;  
  18.        wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;  
  19.        wmParams.height = WindowManager.LayoutParams.MATCH_PARENT;  
  20.         final  View contentView =  new  Button(context);  
  21.        mWindowManager.addView(contentView, wmParams);  
  22.         new  Thread( new  Runnable() {            
  23.          @Override   
  24.          public   void  run() {  
  25.              try  {  
  26.                 Thread.sleep( 7000 );  
  27.             }  catch  (InterruptedException e) {  
  28.                  // TODO Auto-generated catch block   
  29.                 e.printStackTrace();  
  30.             }  
  31.             mWindowManager.removeView(contentView);  
  32.         }  
  33.     }).start();  
  34.      return   "This is a onDisableRequested response message" ;  
  35. }  



1 0