讲解一下如何使用广播通过获取短信的内容去控制手机的锁屏,和恢复出厂设置等功能。
下面进行代码讲解:
1.首先需要开启手机的超级管理员权限
package ccw.mory.phoneantitheft;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn1 ,btn2 ;
private DevicePolicyManager devicePolicyManager ;
private ComponentName componentName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.button) ;
btn2 = (Button) findViewById(R.id.button2) ;
devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
componentName = new ComponentName(this,Admin.class) ;
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"激活超级管理员中");
startActivity(intent);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(devicePolicyManager.isAdminActive(componentName)){
devicePolicyManager.removeActiveAdmin(componentName);
}
}
});
}
}
2.创建一个类去继承 BroadcastReceiver
package ccw.mory.phoneantitheft.brocast;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.telephony.SmsMessage;
import ccw.mory.phoneantitheft.Admin;
/**
* Created by Mory on 2016/7/15.
* 通过短信可以对手机进行处理
*/
public class SmsReceiver extends BroadcastReceiver {
private DevicePolicyManager devicePolicyManager ;
private ComponentName componentName ;
@Override
public void onReceive(Context context, Intent intent) {
devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE) ;
componentName = new ComponentName(context, Admin.class) ;
Object[] objects = (Object[]) intent.getExtras().get("pdus");
String format = intent.getStringExtra("format") ;
for (Object obj : objects){
SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj,format) ;
String smsBody = sms.getMessageBody() ; //拿到短信内容
String sender = sms.getOriginatingAddress() ; //拿到短信发送者
if(smsBody.contains("#*SOS*#")){ //如果短信内容中包好#*SOS*# 直接播放报警音乐
MediaPlayer mp = MediaPlayer.create(context, Uri.parse("")) ; //没有音乐可以播放
mp.start();
}else if(smsBody.contains("#*reset*#")){ //如果短信内容中包含#*reset*# 直接将手机重置为出厂设置
if(devicePolicyManager.isAdminActive(componentName)){
devicePolicyManager.wipeData(0);
}
}else if(smsBody.contains("#*lock*#")){ //如果短信内容中包含#*lock*# 直接将手机锁屏
if(devicePolicyManager.isAdminActive(componentName)){
devicePolicyManager.lockNow();
}
}
}
}
}
3.在创建一个Admin类去继承DeviceAdminReceiver,类中不要做任何操作。
package ccw.mory.phoneantitheft;
import android.app.admin.DeviceAdminReceiver;
/**
* Created by Mory on 2016/7/15.
*/
public class Admin extends DeviceAdminReceiver {
}
4.在清单文件中不要忘记去注册广播
<receiver android:name=".brocast.SmsReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> <receiver android:name=".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>
5.在res资源文件下创建一个xml文件夹,创建名为device_admin_sample.xml的文件,内容如下
<?xml version="1.0" encoding="utf-8"?>
<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>
6.不要忘记了申请短信的权限
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>