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

设备管理器操作步骤

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>



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值