发送短信功能界面

/**

* 发送短信Demo

*

* @description:

* @author ldm

* @date 2016-4-22 上午9:07:53

*/

public class SmsActivity extends Activity implements OnClickListener {

public static final String SMS_RECIPIENT_EXTRA = "com.ldm.study.SMS_RECIPIENT";

public static final String ACTION_SMS_SENT = "com.ldm.study.SMS_SENT_ACTION";

private Button sms_send_message;

private EditText sms_recipient;

private EditText sms_content;

private CheckBox sms_enable_receiver;

private TextView sms_status;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.send_sms_layout);

initViews();

initListeners();

registerSmsReceiver();

}

/**

* 注冊短信监听广播

*

* @description:

* @author ldm

* @date 2016-4-22 上午9:23:23

*/

private void registerSmsReceiver() {

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String message = null;

boolean error = true;

switch (getResultCode()) {

case Activity.RESULT_OK:

message = "发送成功!";

error = false;

break;

case SmsManager.RESULT_ERROR_GENERIC_FAILURE:

message = "发送失败";

break;

case SmsManager.RESULT_ERROR_NO_SERVICE:

message = "发送失败";

break;

case SmsManager.RESULT_ERROR_NULL_PDU:

message = "发送失败";

break;

case SmsManager.RESULT_ERROR_RADIO_OFF:

message = "发送失败";

break;

}

sms_recipient.setEnabled(true);

sms_content.setEnabled(true);

sms_content.setText("");

sms_status.setText(message);

sms_status.setTextColor(error ? Color.RED : Color.GREEN);

}

}, new IntentFilter(ACTION_SMS_SENT));

}

/**

* 监听事件

*

* @description:

* @author ldm

* @date 2016-4-22 上午9:24:20

*/

private void initListeners() {

sms_send_message.setOnClickListener(this);

// 应用Package管理器

final PackageManager pm = this.getPackageManager();

// 获取到应用中指定的组件

final ComponentName componentName = new ComponentName("com.ldm.study",

"com.ldm.study.receiver.SmsMessageReceiver");

// 依据组件是否可用的状态来推断sms_enable_receiver的选中状态

sms_enable_receiver

.setChecked(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);

// 监听sms_enable_receiver设置广播组件是否可用

sms_enable_receiver

.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView,

boolean isChecked) {

// 组件状态设置

pm.setComponentEnabledSetting(

componentName,

isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED

: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,

PackageManager.DONT_KILL_APP);

}

});

}

private void initViews() {

sms_recipient = (EditText) (findViewById(R.id.sms_recipient));

sms_content = ((EditText) findViewById(R.id.sms_content));

// 是否打开短信广播接收开关

sms_enable_receiver = (CheckBox) findViewById(R.id.sms_enable_receiver);

sms_send_message = (Button) findViewById(R.id.sms_send_message);

sms_status = (TextView) findViewById(R.id.sms_status);

if (getIntent().hasExtra(SMS_RECIPIENT_EXTRA)) {

sms_recipient.setText(getIntent().getExtras().getString(

SMS_RECIPIENT_EXTRA));

sms_content.requestFocus();

}

}

@Override

public void onClick(View v) {

if (v.getId() == R.id.sms_send_message) {

sendSms();

}

}

/**

* 发送短信

*

* @description:

* @author ldm

* @date 2016-4-22 上午9:30:38

*/

private void sendSms() {

if (TextUtils.isEmpty(sms_recipient.getText())) {

Toast.makeText(SmsActivity.this, "请输入短信接收者", Toast.LENGTH_SHORT)

.show();

return;

}

if (TextUtils.isEmpty(sms_content.getText())) {

Toast.makeText(SmsActivity.this, "请输入短信内容", Toast.LENGTH_SHORT)

.show();

return;

}

sms_recipient.setEnabled(false);

sms_content.setEnabled(false);

SmsManager sms = SmsManager.getDefault();

List messages = sms.divideMessage(sms_recipient.getText()

.toString());

String recipient = sms_content.getText().toString();

for (String message : messages) {

// 发送短信

sms.sendTextMessage(recipient, null, message, PendingIntent

.getBroadcast(SmsActivity.this, 0, new Intent(

ACTION_SMS_SENT), 0), null);

}

}

}

收到短信后处理界面:

/**

* 接收短信语音播报

*

* @description:

* @author ldm

* @date 2016-4-22 上午9:34:21

*/

public class SmsReceivedActivity extends Activity implements OnInitListener {

private static final int DIALOG_SHOW_MESSAGE = 1;

public static final String SMS_FROM_ADDRESS_EXTRA = "com.ldm.study.SMS_FROM_ADDRESS";

public static final String SMS_FROM_DISPLAY_NAME_EXTRA = "com.ldm.study.SMS_FROM_DISPLAY_NAME";

public static final String SMS_MESSAGE_EXTRA = "com.ldm.study.SMS_MESSAGE";

private TextToSpeech mTts;

private String mFromDisplayName;

private String mFromAddress;

private String mMessage;

private String mFullBodyString;

@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 短信来电号码

mFromAddress = getIntent().getExtras()

.getString(SMS_FROM_ADDRESS_EXTRA);

// 来电人称呼

mFromDisplayName = getIntent().getExtras().getString(

SMS_FROM_DISPLAY_NAME_EXTRA);

mMessage = getIntent().getExtras().getString(SMS_MESSAGE_EXTRA);

// 短信内容

mFullBodyString = String.format(getString(R.string.sms_format),

mFromDisplayName, mMessage);

showDialog(DIALOG_SHOW_MESSAGE);

//初始化TTS

mTts = new TextToSpeech(this, this);

}

/**

* 初始化TTS服务

*/

@SuppressWarnings("deprecation")

public void onInit(int status) {

if (status == TextToSpeech.SUCCESS) {// 成功状态

// 设置语言,TTS引擎支持 English、 French 、 German 、 Italian 和 Spanish 这5大语言

int result = mTts.setLanguage(Locale.ENGLISH);

if (result == TextToSpeech.LANG_MISSING_DATA

|| result == TextToSpeech.LANG_NOT_SUPPORTED) {

Toast.makeText(this, "TTS不可用", Toast.LENGTH_LONG).show();

} else {

mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null);

// mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null,

// "");

}

} else {

Toast.makeText(this, "TTS初始化失败", Toast.LENGTH_LONG).show();

}

}

@Override

protected Dialog onCreateDialog(int id) {

switch (id) {

case DIALOG_SHOW_MESSAGE:

return new AlertDialog.Builder(this)

.setIcon(android.R.drawable.ic_dialog_email)

.setTitle("Message Received")

.setMessage(mFullBodyString)

.setPositiveButton("回复",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int whichButton) {

// 回复短信则跳转到发送短信界面。把接收人信息带过去

Intent i = new Intent();

i.setClass(SmsReceivedActivity.this,

SmsActivity.class);

i.putExtra(SmsActivity.SMS_RECIPIENT_EXTRA,

mFromAddress);

startActivity(i);

dialog.dismiss();

finish();

}

})

.setNegativeButton("取消",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int whichButton) {

dialog.dismiss();

finish();

}

}).create();

}

return null;

}

}

短信广播

/**

* 短信来信监听广播

*

* @description:

* @author ldm

* @date 2016-4-22 上午10:07:49

*/

public class MyMsmReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

Bundle extras = intent.getExtras();

if (extras == null)

return;

// 收到的短信内容

Object[] pdus = (Object[]) extras.get("pdus");

for (int i = 0; i < pdus.length; i++) {

SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);

String fromAddress = message.getOriginatingAddress();

String fromDisplayName = fromAddress;

Uri uri;

String[] projection;

uri = Uri.withAppendedPath(

ContactsContract.PhoneLookup.CONTENT_FILTER_URI,

Uri.encode(fromAddress));

projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME };

// 查询短信的发件人

Cursor cursor = context.getContentResolver().query(uri, projection,

null, null, null);

if (cursor != null) {

if (cursor.moveToFirst())

fromDisplayName = cursor.getString(0);

cursor.close();

}

// 跳转到短信接收界面

Intent di = new Intent();

di.setClass(context, SmsReceivedActivity.class);

di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK

| Intent.FLAG_ACTIVITY_SINGLE_TOP);

di.putExtra(SmsReceivedActivity.SMS_FROM_ADDRESS_EXTRA, fromAddress);

di.putExtra(SmsReceivedActivity.SMS_FROM_DISPLAY_NAME_EXTRA,

fromDisplayName);

di.putExtra(SmsReceivedActivity.SMS_MESSAGE_EXTRA, message

.getMessageBody().toString());

context.startActivity(di);

}

}

}

DEMO下载地址:http://download.csdn.net/detail/true100/9498881

查看原文