手机卫士11-手机锁屏和出厂恢复功能

简介: <table cellspacing="0" cellpadding="0" style="word-wrap:break-word; empty-cells:show; border-collapse:collapse; table-layout:fixed; width:1119px; color:rgb(68,68,68); font-family:Tahoma,'Microsoft



有些不知道怎么用我们这个锁屏的功能 ,其实很简单的,我们只要把服务 开启了,然后如果 你要进行锁屏,那么就可以通过 另一台手机,发送一条锁屏的短信如:

  1. #*lockscreen*#
复制代码
就会锁屏的啦,具体服务 怎么开,就要看看我们前面的内容 啦!

好啦,我们今天就来继续我们的手机防盗啊,今天我们应该就会把手机防盗这个功能全部完成它的啦,

昨天我们已经讲了怎样发送短信指令啦,今天我们就继续完善这个短信指令啦,就是增加锁屏操作啊,还有恢复到出厂模式啦,还有一个就是播放报警音乐啦

还有最重要的一个,我们要做一个流氓软件,没错,就是要做一个流氓软件,其实也不是啦,就是让一般的用户不知道怎样卸载我们的软件而已,所以当小偷偷到了我们的手机,也无法卸载掉我们的软件。

其实我们今天要讲的就是通过拿到系统硬件的一些对象,然后进行一些操作,这些都是Android已经封装好的啦,都在api文档里面有说的

我先告诉大家在那里找到,然后以后大家也可以多点去看一下那个文档啦


它其实也就是在那个DevicePolicies里面

这里面的东西大家都可以看一下


好啦,我们现在就要开始写代码啦,首先我们要创建一个Receiver来接收广播,但这个Receiver继承的不是BroadcastReceiver而是DeviceAdminReceiver

但是,从本质上来讲DeviceAdminReceiver也是继承了BroadcastReceiver的

com.xiaobin.security.receiver.MyAdminReceiver

  1. package com.xiaobin.security.receiver;

  2. import android.app.admin.DeviceAdminReceiver;

  3. public class MyAdminReceiver extends DeviceAdminReceiver
  4. {

  5. }
复制代码
这个类很简单,我们什么都不用干,但是我们还是要把它注册到AndroidManifest里面去的,但是我们先不注册,我们还要在res目录下面新建一个目录名为xml然后在xml里面新建一个xml文件,然后写上下面的内容myadmin.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <device-admin xmlns:android="http://schemas.android.com/apk/res/android" >

  3.     <uses-policies>
  4.         <limit-password />

  5.         <watch-login />

  6.         <reset-password />

  7.         <force-lock />

  8.         <wipe-data />

  9.         <expire-password />

  10.         <encrypted-storage />

  11.         <disable-camera />
  12.     </uses-policies>

  13. </device-admin>
复制代码
其实这个xml就是定义一些设备的信息而已,大家看那个名字也可以知道有什么用的啦,所以只要照着写就行啦
好啦,现在,这个xml文件写好之后,我们就可以去AndroidManifest里面注册我们刚刚写的Receiver啦
  1.         <receiver 
  2.             android:name="com.xiaobin.security.receiver.MyAdminReceiver">
  3.                     <meta-data android:name="android.app.device_admin"
  4.                             android:resource="@xml/myadmin" />
  5.                     <intent-filter>
  6.                         <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
  7.                     </intent-filter>
  8.                 </receiver>
复制代码
可以看到它多了一个<meta-data>的节点,这个节点就是指定我们刚刚写的xml文件的好啦,现在初始化工作,我们就完成的差不多啦,现在我们就要反逻辑加上去啦,我们就要在设置向导设置完成的时候进行设备的激活啦,也就是加入几行代码而已
  1.                 //拿到一个设备管理器
  2.                 DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
  3.                 //new一个新的组件出来,用来启动注册管理器的界面
  4.                 ComponentName componentName = new ComponentName(this, MyAdminReceiver.class);
  5.                 //判断是否已经注册,没有就进行注册
  6.                 if(!devicePolicyManager.isAdminActive(componentName))
  7.                 {
  8.                         Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
  9.                         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
  10.                         startActivity(intent);
  11.                 }
复制代码
上面的代码我们都是在设置向导完成的时候做的,也就是在SetupGuideActivity4里面完成的,下面是完整的SetupGuideActivity4这个类的完整代码com.xiaobin.security.ui.SetupGuideActivity4
  1. package com.xiaobin.security.ui;

  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.admin.DevicePolicyManager;
  5. import android.content.ComponentName;
  6. import android.content.Context;
  7. import android.content.DialogInterface;
  8. import android.content.Intent;
  9. import android.content.SharedPreferences;
  10. import android.content.SharedPreferences.Editor;
  11. import android.os.Bundle;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.Button;
  15. import android.widget.CheckBox;
  16. import android.widget.CompoundButton;
  17. import android.widget.CompoundButton.OnCheckedChangeListener;

  18. import com.xiaobin.security.R;
  19. import com.xiaobin.security.receiver.MyAdminReceiver;

  20. public class SetupGuide4Activity extends Activity implements OnClickListener
  21. {
  22.         private Button bt_pervious;
  23.         private Button bt_finish;
  24.         private CheckBox cb_protected;
  25.         private SharedPreferences sp;
  26.         
  27.         @Override
  28.         protected void onCreate(Bundle savedInstanceState)
  29.         {
  30.                 super.onCreate(savedInstanceState);
  31.                 setContentView(R.layout.setup_guide4);
  32.                 
  33.                 bt_pervious = (Button) findViewById(R.id.bt_guide_pervious);
  34.                 bt_finish = (Button) findViewById(R.id.bt_guide_finish);
  35.                 bt_finish.setOnClickListener(this);
  36.                 bt_pervious.setOnClickListener(this);
  37.                 
  38.                 cb_protected = (CheckBox) findViewById(R.id.cb_guide_protected);
  39.                 
  40.                 sp = getSharedPreferences("config", Context.MODE_PRIVATE);
  41.                 boolean isProtecting = sp.getBoolean("isProtected", false);
  42.                 if(isProtecting)
  43.                 {
  44.                         cb_protected.setText("已经开启保护");
  45.                         cb_protected.setChecked(true);
  46.                 }
  47.                 
  48.                 cb_protected.setOnCheckedChangeListener(new OnCheckedChangeListener()
  49.                 {
  50.                         @Override
  51.                         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
  52.                         {
  53.                                 if(isChecked)
  54.                                 {
  55.                                         cb_protected.setText("已经开启保护");
  56.                                         Editor editor = sp.edit();
  57.                                         editor.putBoolean("isProtected", true);
  58.                                         editor.commit();
  59.                                 }
  60.                                 else
  61.                                 {
  62.                                         cb_protected.setText("没有开启保护");
  63.                                         Editor editor = sp.edit();
  64.                                         editor.putBoolean("isProtected", false);
  65.                                         editor.commit();
  66.                                 }
  67.                         }
  68.                 });
  69.         }

  70.         @Override
  71.         public void onClick(View v)
  72.         {
  73.                 switch(v.getId())
  74.                 {
  75.                         case R.id.bt_guide_finish : 
  76.                                 if(cb_protected.isChecked())
  77.                                 {
  78.                                         finishSetupGuide();
  79.                                         finish();
  80.                                 }
  81.                                 else
  82.                                 {
  83.                                         AlertDialog.Builder builder = new AlertDialog.Builder(this);
  84.                                         builder.setTitle("提醒");
  85.                                         builder.setMessage("强烈建议您开启保护, 是否完成设置");
  86.                                         builder.setCancelable(false);
  87.                                         builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener()
  88.                                         {
  89.                                                 @Override
  90.                                                 public void onClick(DialogInterface dialog, int which)
  91.                                                 {
  92.                                                         finishSetupGuide();
  93.                                                         finish();
  94.                                                 }
  95.                                         });
  96.                                         builder.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener()
  97.                                         {
  98.                                                 @Override
  99.                                                 public void onClick(DialogInterface dialog, int which)
  100.                                                 {
  101.                                                         finishSetupGuide();
  102.                                                 }
  103.                                         });
  104.                                         builder.create().show();
  105.                                 }
  106.                                 break;
  107.                                 
  108.                         case R.id.bt_guide_pervious : 
  109.                                 Intent intent = new Intent(this, SetupGuide3Activity.class);
  110.                                 finish();
  111.                                 startActivity(intent);
  112.                                 //这个是定义activity切换时的动画效果的
  113.                                 overridePendingTransition(R.anim.alpha_in, R.anim.alpha_out);
  114.                                 break;
  115.                                 
  116.                         default : 
  117.                                 break;
  118.                 }
  119.         }
  120.         
  121.         private void finishSetupGuide()
  122.         {
  123.                 Editor editor = sp.edit();
  124.                 editor.putBoolean("setupGuide", true);//记录是否已经进行过设置向导了
  125.                 editor.commit();
  126.                 
  127.                 //拿到一个设备管理器
  128.                 DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
  129.                 //new一个新的组件出来,用来启动注册管理器的界面
  130.                 ComponentName componentName = new ComponentName(this, MyAdminReceiver.class);
  131.                 //判断是否已经注册,没有就进行注册
  132.                 if(!devicePolicyManager.isAdminActive(componentName))
  133.                 {
  134.                         Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
  135.                         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
  136.                         startActivity(intent);
  137.                 }
  138.         }

  139. }
复制代码
完成到上面之后,我们如果重新运行程序,然后重新进行设置向导的话,当进入到最后一个设置向导,然后点完成的时候,会出现下面激活设备的界面的 

我们激活之后,那就可以进行锁屏啊,恢复到出厂模式这些操作啦好啦,现在我们就来完善我们的短信指令啦,在处理短信指令那里进行添加指令啦com.xiaobin.security.receiver.SmsReceiver
  1. package com.xiaobin.security.receiver;

  2. import com.xiaobin.security.R;
  3. import com.xiaobin.security.engine.GPSInfoProvider;

  4. import android.app.admin.DevicePolicyManager;
  5. import android.content.BroadcastReceiver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.media.MediaPlayer;
  9. import android.telephony.SmsManager;
  10. import android.telephony.SmsMessage;

  11. public class SmsReceiver extends BroadcastReceiver
  12. {

  13.         @Override
  14.         public void onReceive(Context context, Intent intent)
  15.         {
  16.                 Object[] pdus = (Object[]) intent.getExtras().get("pdus");
  17.                 for(Object pdu : pdus)
  18.                 {
  19.                         SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
  20.                         //拿到短信内容
  21.                         String content = smsMessage.getMessageBody();
  22.                         //拿到发送人的电话号码
  23.                         String sender = smsMessage.getOriginatingAddress();
  24.                         
  25.                         //这个是通过短信发送指令,然后进行一些操作的
  26.                         if(content.equals("#*location*#"))
  27.                         {
  28.                                 abortBroadcast();//终止广播,免得让小偷看到短信
  29.                                 GPSInfoProvider gpsInfoProvider = GPSInfoProvider.getInstance(context);
  30.                                 String location = gpsInfoProvider.getLocation();
  31.                                 System.out.println(location);
  32.                                 if(!location.equals(""))
  33.                                 {
  34.                                         //发送短信
  35.                                         SmsManager smsManager = SmsManager.getDefault();
  36.                                         smsManager.sendTextMessage(sender, null, location, null, null);
  37.                                 }
  38.                         }
  39.                         else if(content.equals("#*lockscreen*#"))
  40.                         {
  41.                                 DevicePolicyManager manager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
  42.                                 //重新设置密码,第一个参数就是密码,第二个参数暂时没有用,但要设置为0
  43.                                 manager.resetPassword("123", 0);
  44.                                 //进行锁屏
  45.                                 manager.lockNow();
  46.                                 abortBroadcast();
  47.                         }
  48.                         else if(content.equals("#*wipe*#"))
  49.                         {
  50.                                 DevicePolicyManager manager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
  51.                                 //恢复到出厂模式,参数暂时没有用,但要置为0
  52.                                 manager.wipeData(0);
  53.                                 abortBroadcast();
  54.                         }
  55.                         else if(content.equals("#*alarm*#"))
  56.                         {
  57.                                 //这个方法已经调用的prepare这个方法的啦,所以不用自己调用prepare这个方法
  58.                                 MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.jxmzf);
  59.                                 //设置声音为最大声
  60.                                 mediaPlayer.setVolume(1.0f, 1.0f);
  61.                                 mediaPlayer.start();
  62.                                 abortBroadcast();
  63.                         }
  64.                 }
  65.         }

  66. }
复制代码
从上面的代码我们可以看到,我们新增了三个指令,就是锁屏和恢复到出厂模式,还有播放报警音乐,播放报警音乐的音乐我们放到了res/raw下面的啦,如果没有这个目录,可以新建一个。到现在为止,我们的这个软件就可以进行测试一下有没有效的啦。而且你现在如果想卸载我们的这个软件,你会发现普通的卸载方式会卸载不了的,这就是我刚开始时候说的流氓软件啦,其实也没那么夸张啦,我们只是把设备激活了,所以无法卸载而已只要我们进入到设置,然后去到位置与安全,然后去到选择设备,就会看到我们的程序已经在设备里面啦,只要把那个勾去掉,我们的程序就可以卸载的啦   
 

好啦,今天我们讲得也差不多的啦,我们的手机防盗这个功能也算是完成的啦,如果大家还有什么疑问的,也可以留言,我们接下来就会进入到下一个功能的开发的啦,其实上面的短信指令,还可以做很多东西的,大家可以根据自己的需要进行添加多一些指令,好啦,明天我们就继续新功能的开发,如果有什么不明白的,可以回头看一下我们之前的课程。
 Security_11锁屏操作与恢复出厂模式.rar (4.95 MB, 下载次数: 227) 
目录
相关文章
|
Android开发
Android11.0(R) 手机锁屏炫酷充电动画————自定义View方案
Android11.0(R) 手机锁屏炫酷充电动画————自定义View方案
217 0
|
XML JavaScript 前端开发
AndroidQ(10.0) 手机锁屏炫酷充电动画————html方案
AndroidQ(10.0) 手机锁屏炫酷充电动画————html方案
101 1
|
JSON Java Android开发
AndroidQ(10.0) 手机锁屏炫酷充电动画————lottie方案
AndroidQ(10.0) 手机锁屏炫酷充电动画————lottie方案
324 0
|
Android开发
《手机卫士性能优化方案-Android篇》电子版地址
手机卫士性能优化方案-Android篇
75 0
《手机卫士性能优化方案-Android篇》电子版地址
|
安全
金山手机卫士正式版发布 永久免费
近日,金山安全软件有限公司首次公开发布金山手机卫士正式版,并宣布下载,安装,升级金山手机卫士完全免费,手机卫士是金山安全软件公司今年成立后回馈用户的又一力作。目前支持主流的智能手机操作系统——塞班S60和Android。
988 0

热门文章

最新文章