今天写了个小demo,通过设置一个安全号码,并给其发送短信。按照短信内容操作,能执行短信内容的操作。好了,废话不多说。直接进入正题。
预览效果
给主页面设置一个button xml里面写个button 给其设个id 或onClick;这里就不贴代码了。
由于是点击一个button弹出一个对话框,所以在 activity里,如果你设的是id,你就先需要得到id,然后给其设监听事件。如果你设的是onClick,就给他写个点击事件方法。本人写的是onClick,代码如下:
package com.example.an_phonenumberdemo;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private SharedPreferences.Editor editor;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText= new EditText(MainActivity.this);
//得到SharedPreferences
SharedPreferences sp=getSharedPreferences("save", Context.MODE_PRIVATE);
editor = sp.edit();
//取
String phone=sp.getString("number","");
editText.setText(phone);
}
public void savenumber(View view){
//显示对话框
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("请输入安全号码:");
//设置编辑框
builder.setView(editText);
builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 获取编辑框的号码
String number= editText.getText().toString();
editor.putString("number",number);
// //提交
editor.commit();
SmsManager smsManager=SmsManager.getDefault();
String manage="请执行以下操作:1:关机,2:响铃";
List<String> list=smsManager.divideMessage(manage);
for (String text:list){
PendingIntent pi=PendingIntent.getBroadcast(MainActivity.this,0,new Intent(),0);
smsManager.sendTextMessage(editText.getText().toString(),null,text,pi,null);
}
Toast.makeText(MainActivity.this, "发送成功", Toast.LENGTH_SHORT).show();
}
});{
builder.show();
}
}
}
有一点就是因为要给安全号码发送短信,还要给安全号码返回指令,所以为了避免之后要判断是否是安全号码接收的指令,所以可以先用SharedPreferences把安全号码先存起来。别忘了配置发送短信的权限。
<!--发送短信的权限-->
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
接下来就是接收短信了,代码如下:
package com.example.an_phonenumberdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;
public class Receive extends BroadcastReceiver {
private String body;
@Override
public void onReceive(Context context, Intent intent) {
if("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())) {
Log.i("test", "有短信进来了");
//获取短信的内容
Bundle bundle = intent.getExtras();
Object[] objects = (Object[]) bundle.get("pdus");
SmsMessage[] smsMessages = new SmsMessage[objects.length];
for (int i = 0; i < objects.length; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) objects[i]);
}
for (SmsMessage message : smsMessages) {
String address = message.getDisplayOriginatingAddress();
body = message.getDisplayMessageBody();
Log.i("test", "发送人:" + address);
Log.i("test", "内容:" + body);
if(body.equals("2")){
MediaPlayer mediaPlayer=MediaPlayer.create(context,R.raw.pianai);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
}
}
}
}
接收短信时需根据短信内容判断,如果他回复的是一,便执行关机操作……由于类似就做了响铃的操作,响铃操作需要在res下面建个raw文件,把音频文件放进去。值得注意的是,现在手机的权限越来越高了,可能执行不了这个操作,这是正常的,可以将手机root,便能解决这个问题。