实现防卸载首先需要激活设备管理器。激活 设备管理器后应用将无法正常卸载,取消激活后可即可正常卸载。
所以我们要禁止用户取消激活。
激活设备管理器请参考: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
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- 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();
- return "This is a onDisableRequested response message" ;
- }
2 、通过阻塞函数返回方式
- @Override
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- try {
- Thread.sleep( 7000 );
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "This is a onDisableRequested response message" ;
- }
3 、通过透明窗口劫持方式
- @Override
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings" );
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- WindowManager.LayoutParams wmParams;
- final WindowManager mWindowManager;
- wmParams = new WindowManager.LayoutParams();
- mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
- wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
- wmParams.format = PixelFormat.RGBX_8888;
- wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- wmParams.gravity = Gravity.LEFT | Gravity.TOP;
- wmParams.alpha = 0 ;
- wmParams.x = 0 ;
- wmParams.y = 0 ;
- wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
- wmParams.height = WindowManager.LayoutParams.MATCH_PARENT;
- final View contentView = new Button(context);
- mWindowManager.addView(contentView, wmParams);
- new Thread( new Runnable() {
- @Override
- public void run() {
- try {
- Thread.sleep( 7000 );
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mWindowManager.removeView(contentView);
- }
- }).start();
- return "This is a onDisableRequested response message" ;
- }
通过激活设备管理器,可以防止Android应用被正常卸载。当用户尝试取消激活时,可以通过锁屏、阻塞函数返回或透明窗口劫持等方式阻止,确保应用的安全性。
432

被折叠的 条评论
为什么被折叠?



