1.Android进阶:操作设备管理器

设备管理器操作步骤

1.创建类DeviceAdminReceiver的子类
public class AdminReceiver extends DeviceAdminReceiver {

}

2.在清单文件中配置广播接收者
 
    

    
        
    

3.配置字符串相关信息

超级管理员,可以远程锁屏,擦除数据
超级管理员


4.在res目录下创建xml文件夹,在该文件夹下创建device_admin_sample.xml文件,内容:



    
		
        

		
        

		
        

		
        

		
        

		
        

		
        

        
    


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);																// 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.在清单文件里配置需要的权限

    
    
    
    
    
    
    
    
    
    
	
    
	
    

8.类的配置清单文件



	
	
		
	








你可能感兴趣的:(Android进阶)