Android自定义发送短信功能

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);
    }

}



你可能感兴趣的:(Android基础知识)