xml文件sendmessage.xml
java代码文件SendMessageAcitivity.java
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class SendMessageAcitivity extends Activity implements OnClickListener {
Button sendMessageBtn;
Button cancelBtn;
EditText phoneText;
EditText messageText;
private String phoneNumber;
/**发送与接收的广播**/
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
setContentView(R.layout.sendmessage);
sendMessageBtn =(Button)findViewById(R.id.send);
sendMessageBtn.setOnClickListener(this);
cancelBtn =(Button)findViewById(R.id.cancel);
cancelBtn.setOnClickListener(this);
phoneText =(EditText)findViewById(R.id.mobile);
messageText =(EditText)findViewById(R.id.content);
Intent intent =this.getIntent();
phoneNumber =intent.getStringExtra("telephone");
phoneText.setText(phoneNumber);
messageText.setFocusable(true);
messageText.requestFocus();
}
@Override
protected void onResume() {
super.onResume();
// 注册广播 发送消息
registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));
registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(sendMessage);
unregisterReceiver(receiver);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send:
if(sendCheck()){
String message = messageText.getText().toString().trim();
String phoneNumber = phoneText.getText().toString().trim();
try {
if(isPhoneNumberValid(phoneNumber)){
if(isCanUseSim()){
sendSMS(phoneNumber, message);
}else{
Toast.makeText(this, "请确认sim卡是否插入或者sim卡暂时不可用", Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
break;
case R.id.cancel:
Intent intent = new Intent(SendMessageAcitivity.this,MainActivity.class);
setResult(RESULT_OK, intent);
finish();
break;
default:
break;
}
}
public boolean sendCheck(){
String message = messageText.getText().toString().trim();
String phoneNumber = phoneText.getText().toString().trim();
if("".equals(phoneNumber)){
Toast.makeText(this, "请输入手机号码", Toast.LENGTH_SHORT).show();
return false;
}
if("".equals(message)){
Toast.makeText(this, "请输入短信内容", Toast.LENGTH_SHORT).show();
return false;
}
return true;
}
private BroadcastReceiver sendMessage = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//判断短信是否发送成功
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(SendMessageAcitivity.this, "短信发送成功", Toast.LENGTH_SHORT).show();
Intent intent2 = new Intent(SendMessageAcitivity.this,MainActivity.class);
SendMessageAcitivity.this.setResult(RESULT_OK, intent2);
SendMessageAcitivity.this.finish();
break;
default:
Toast.makeText(SendMessageAcitivity.this, "短信发送失败", Toast.LENGTH_SHORT).show();
break;
}
}
};
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//表示对方成功收到短信
Toast.makeText(SendMessageAcitivity.this, "对方接收成功",Toast.LENGTH_SHORT).show();
}
};
/**
* 参数说明
* destinationAddress:收信人的手机号码
* scAddress:发信人的手机号码
* text:发送信息的内容
* sentIntent:发送是否成功的回执,用于监听短信是否发送成功。
* DeliveryIntent:接收是否成功的回执,用于监听短信对方是否接收成功。
*/
private void sendSMS(String phoneNumber, String message) {
SmsManager sms = SmsManager.getDefault();
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, 0);
Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, deliverIntent, 0);
Toast.makeText(SendMessageAcitivity.this, "发送中", Toast.LENGTH_SHORT).show();
//如果短信内容超过70个字符 将这条短信拆成多条短信发送出去
if (message.length() > 70) {
ArrayList msgs = sms.divideMessage(message);
for (String msg : msgs) {
sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);
}
} else {
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
}
}
//判断手机号码
public static boolean isPhoneNumberValid(String phoneNumber) {
boolean isValid = false;
//可接受的电话格式有:
String expression = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{5})$";
String expression2 = "^\\(?(\\d{3})\\)?[- ]?(\\d{4})[- ]?(\\d{4})$";
CharSequence inputStr = phoneNumber;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputStr);
Pattern pattern2 = Pattern.compile(expression2);
Matcher matcher2 = pattern2.matcher(inputStr);
if(matcher.matches() || matcher2.matches()) {
isValid = true;
}
return isValid;
}
//sim卡是否可读
public boolean isCanUseSim() {
try {
TelephonyManager mgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return TelephonyManager.SIM_STATE_READY == mgr.getSimState();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){
Intent intent = new Intent(SendMessageAcitivity.this,MainActivity.class);
setResult(RESULT_OK, intent);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}