使用短信去控制手机的某些功能

来源:互联网 发布:js prompt不弹出窗口 编辑:程序博客网 时间:2024/04/29 21:40

讲解一下如何使用广播通过获取短信的内容去控制手机的锁屏,和恢复出厂设置等功能。

下面进行代码讲解:

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"/>

0 0