设备管理器操作步骤
1.创建类DeviceAdminReceiver的子类
2.在清单文件中配置广播接收者
1.创建类DeviceAdminReceiver的子类
public class AdminReceiver extends DeviceAdminReceiver { }
2.在清单文件中配置广播接收者
<receiver android:name="com.itbaihai.mobilesafe.receiver.AdminReceiver" android:description="@string/sample_device_admin_description" android:label="@string/sample_device_admin" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>
3.配置字符串相关信息
<string name="sample_device_admin_description">超级管理员,可以远程锁屏,擦除数据</string> <string name="sample_device_admin">超级管理员</string>
4.在res目录下创建xml文件夹,在该文件夹下创建device_admin_sample.xml文件,内容:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" > <uses-policies> <!-- 限制密码 --> <limit-password /> <!-- 监控登录尝试 --> <watch-login /> <!-- 重置密码 --> <reset-password /> <!-- 强行锁定 --> <force-lock /> <!-- 擦除数据 --> <wipe-data /> <!-- 密码过期 --> <expire-password /> <!-- 禁用摄像机 --> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>
5.在res目录下创建raw文件夹,在该文件夹下放入需要播放的音乐资源
6.在代码中创建设备管理器和组件,实现功能
public class LostFindService extends Service { private SmsReceiver receiver; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } /** * @author Administrator * 短信的广播接收者 */ private class SmsReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //实现短信拦截功能 Bundle extras = intent.getExtras(); Object datas[] = (Object[]) extras.get("pdus"); for (Object data:datas){ //得到电话号码 String originatingAddress = sms.getOriginatingAddress(); //得到短信内容 String messageBody = sms.getMessageBody(); System.out.println("号码:" + originatingAddress + ";内容:" + messageBody); if ("#*location*#".equals(messageBody)) { System.out.println("手机定位"); // 启动位置监听的服务 context.startService(new Intent(context, LocationService.class)); abortBroadcast();// 中断短信传递 } else if ("#*lockscreen*#".equals(messageBody)){ // 设备策略管理器 mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); // 初始化管理员组件 mDeviceComponentName = new ComponentName(context, AdminReceiver.class); // 要执行超级管理员功能, 必须激活管理员权限:设置->安全->设备管理器 if (mDPM.isAdminActive(mDeviceComponentName)) {// 判断当前是否已经激活 mDPM.lockNow();// 立即锁屏 mDPM.resetPassword("123456", 0);// 重新设置密码, 传""取消密码 } else { Toast.makeText(context, "您还没有激活超级管理员权限!", Toast.LENGTH_SHORT).show(); } abortBroadcast();//终止广播 } else if ("#*wipedata*#".equals(messageBody)) {//远程清除数据 // 设备策略管理器 DevicePolicyManager mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); // 初始化管理员组件 ComponentName mDeviceComponentName = new ComponentName(context, AdminReceiver.class); // 判断当前是否已经激活 if (mDPM.isAdminActive(mDeviceComponentName)) { // WIPE_EXTERNAL_STORAGE表示清除手机内存和sdcard, // 0表示只清除手机内存(恢复出厂设置) mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); </span>// 0表示只清除手机内存 Toast.makeText(context, "数据清除完成!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "您还没有激活超级管理员权限!", Toast.LENGTH_SHORT).show(); } abortBroadcast();//终止广播 } if ("#*alarm*#".equals(messageBody)) { // 播放报警音乐 System.out.println("播放报警音乐"); // asset , raw(可以通过id引入) // 播放媒体音乐的音量和手机铃声音量无关 MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs); // 音量最大, 基于系统音量的比值 player.setVolume(1f, 1f); player.setLooping(true);// 单曲循环 player.start();// 开始播放 // 4.4+版本上,无法拦截短信, 调此方法没有, 比如当前应用时默认短信应用才可以 // 操作短信数据库, 删除数据库相关短信内容, 间接达到删除短信目的 abortBroadcast();// 中断短信传递 } } } @Override public void onCreate() { //短信广播接收者 receiver = new SmsReceiver(); IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); filter.setPriority(Integer.MAX_VALUE);//级别一样,清单文件,谁先注册谁先执行,如果级别一样,代码比清单要高 //注册短信监听 registerReceiver(receiver, filter ); super.onCreate(); } @Override public void onDestroy() { // TODO Auto-generated method stub //取消注册短信的监听广播 unregisterReceiver(receiver); super.onDestroy(); } }
GPS位置变换类
public class LocationService extends Service { private LocationManager mLM; private MyListener mListener; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); mLM = (LocationManager) getSystemService(LOCATION_SERVICE); // 初始化标准 Criteria criteria = new Criteria(); // 设置精度标准 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 允许花费流量 criteria.setCostAllowed(true); // 获取当前最合适的位置提供者,(那个信号号就用哪个,3G,GPS等) // 参1:标准,参2:是否可用 String bestProvider = mLM.getBestProvider(criteria, true); System.out.println("best provider:" + bestProvider); mListener = new MyListener(); // 请求位置更新, 参1:位置提供者,参2:最短更新时间(经过多少时间请求定位一次), //参3:最短更新距离(离开上一次范围多大请求定位一次);参4:位置监听; // 参2参3改为0,表示只要位置变化,就马上更新 mLM.requestLocationUpdates(bestProvider, 0, 0, mListener); } class MyListener implements LocationListener { // 位置发生变化 @Override public void onLocationChanged(Location location) { //得到最新更新的位置 String j = "j:" + location.getLongitude(); String w = "w:" + location.getLatitude(); String accuracy = "accuracy:" + location.getAccuracy(); String result = j + "\n" + w + "\n" + accuracy; // 发送经纬度给安全号码 String phone = PrefUtils.getString("safe_phone", "", getApplicationContext()); SmsManager sm = SmsManager.getDefault(); sm.sendTextMessage(phone, null, result, null, null); //发送一次短信服务就停止 stopSelf();// 服务自杀的方法 } // 状态发生变化(信号的变化) @Override public void onStatusChanged(String provider, int status, Bundle extras) { System.out.println("onStatusChanged"); } // 用户打开GPS @Override public void onProviderEnabled(String provider) { System.out.println("onProviderEnabled"); } // 用户关闭GPS @Override public void onProviderDisabled(String provider) { System.out.println("onProviderDisabled"); } } @Override public void onDestroy() { super.onDestroy(); // 停止位置监听 mLM.removeUpdates(mListener); mListener = null; } }
7.在清单文件里配置需要的权限
<strong> </strong> <!-- 开机广播权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 发送短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/>
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- 接收短信权限 -->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<!-- 网络定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- GPS定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 模拟器定位权限 -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
8.类的配置清单文件
<!-- 发送短信播放音乐广播注册 --> <receiver android:name="com.itbaihai.mobilesafe.receiver.SmsReceiver" > <!-- 最大优先级 --> <intent-filter android:priority="2147483647" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> <!-- 手机定位服务注册 --> <service android:name="com.itbaihai.mobilesafe.service.LocationService" > </service> <service android:name="com.itbaihai.mobilesafe.service.LostFindService"></service>