手机远程控制
1、 设备管理器
手机远程控制最重要的是要外置应用拿到管理设备的权限,这些权限在设备管理器中进行注册,就是大家在我们Settings->安全->设备管理器中能看到的。
A、申明一个管理器权限要求列表:myadmin.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 3 <device-admin xmlns:android="http://schemas.android.com/apk/res/android" > 4 5 <!-- 6 7 限制密码类型 8 9 查看登录方式 10 11 重置密码 12 13 强制锁屏 14 15 清除数据 16 17 更改密码 18 19 加密设备 20 21 关闭摄像头头 22 23 --> 24 25 <uses-policies> 26 27 <limit-password /> 28 29 <watch-login /> 30 31 <reset-password /> 32 33 <force-lock /> 34 35 <wipe-data /> 36 37 <expire-password /> 38 39 <encrypted-storage /> 40 41 <disable-camera /> 42 43 </uses-policies> 44 45 </device-admin> 46 47
B、申明一个设备管理器的调用组件:MyAdminReceiver.java
1 public class MyAdminReceiver extends DeviceAdminReceiver{ 2 3 @Override 4 5 public void onEnabled(Context context, Intent intent) { 6 7 // TODO Auto-generated method stub 8 9 super.onEnabled(context, intent); 10 11 } 12 13 @Override 14 15 public void onDisabled(Context context, Intent intent) { 16 17 // TODO Auto-generated method stub 18 19 super.onDisabled(context, intent); 20 21 } 22 23 }
C、在Manifest.xml中注册此组件,注明组件用的是哪一个权限申明表
1 <receiver android:name="com.example.cleaner.MyAdminReceiver" > 2 3 <meta-data 4 5 android:name="android.app.device_admin" 6 7 android:resource="@xml/myadmin" /> 8 9 <!-- 指定设备管理权限设置表 --> 10 11 <intent-filter> 12 13 <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 14 15 <!-- 拿到设备管理器开启的广播 --> 16 17 </intent-filter> 18 19 </receiver>
D、启动设备管理器组件注册请求,用来启动设备管理器的注册界面
1 // 拿到一个设备管理器 2 3 DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 4 5 // new一个新的组件出来,用来启动注册管理器的界面 6 7 ComponentName componentName = new ComponentName( 8 9 MainActivity.this, MyAdminReceiver.class); 10 11 Intent intent = new Intent( DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 12 13 intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, 14 15 componentName); 16 17 startActivity(intent);
2、 MD5加密模块
作为一款防盗应用,设置只有主人才能进入的密码是必须的,一般密码保存在数据库里,这样的话容易被拿出来查看,所以有必要对密码进行加密。
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
1 try { 2 3 MessageDigest messageDigest = MessageDigest.getInstance("MD5"); //MD5加密模块 4 5 byte[] bytes = messageDigest.digest(password.getBytes());//加密密码成字节码 6 7 StringBuffer sb = new StringBuffer(); 8 9 String tmp; 10 11 for (int i = 0; i < bytes.length; i++) { 12 13 tmp = Integer.toHexString(0xff & bytes[i]);//转换成十六进制 14 15 if (tmp.length() == 1) { 16 17 sb.append("0" + tmp);//补0 18 19 } else 20 21 sb.append(tmp); 22 23 } 24 25 return sb.toString(); 26 27 } catch (NoSuchAlgorithmException e) { 28 29 throw new RuntimeException("没有此加密算法" + e); 30 31 } 32 33
3、 定位实现
A、SIM卡被置换给信任号码发短信,密发
1 TelephonyManager telephonyManager = (TelephonyManager) context 2 3 .getSystemService(Context.TELEPHONY_SERVICE); 4 5 // 拿到telephoneymanager对象 6 7 String currentSimString = telephonyManager.getLine1Number(); 8 9 // 获取当前SIM卡号码,需要Permission: READ_PHONE_STATE 10 11 String protectedSim = spPreferences.getString("simSerial", ""); 12 13 SmsManager smsManager = SmsManager.getDefault(); 14 15 // 拿到SMS管理器,用于发送短信需要的东西 16 17 String number = spPreferences.getString("number", ""); 18 19 if (isProtected) { 20 21 if (!currentSimString.equals(protectedSim)) { 22 23 // 发送短信,有5个参数,第一个是要发送到的地址,第二个是发送人,可以设置为null,第三个是要发送的信息,第四个是发送状态,第五个是发送后的,都可以置为null 24 25 smsManager.sendTextMessage(number, null, "您一个号码为: " 26 27 + protectedSim + " 的好友可能手机被盗,现在他的手机号为:" 28 29 + currentSimString + ",请及时通知该好友,谢谢!", null, null); 30 31 } 32 33 }
4、 清除数据与锁屏
1 DevicePolicyManager manager = (DevicePolicyManager) context 2 3 .getSystemService(Context.DEVICE_POLICY_SERVICE); 4 5 manager.wipeData(0);//清除数据 6 7 manager.resetPassword(lockString[2], 0); 8 9 // 进行锁屏 10 11 manager.lockNow();