发送短信功能界面

/**
* 发送短信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<String> 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

Android短信收到,语音播报的更多相关文章

  1. Android短信监听实现,及Android4.4之后短信机制变更

    前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去    按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...

  2. 【mob】Android短信验证+源码

    在很多的应用当中,都涉及到了短信验证的功能,比如在注册或者找回密码的时候,那么我们如何通过第三方的平台来完成这个功能呢? 本面博文就实现短信验证,来做一个小的栗子. 第一步-下载开发包 第二步-将SD ...

  3. Android 短信的还原

    上篇文章讲到<Android 短信的备份>,本文主要实现Android 短信的还原,即是将一条 布局文件: <RelativeLayout xmlns:android="h ...

  4. Android短信发送器(2)

    在上一篇的<Android短信发送器>当中.发送功能并不完好.当发送内容超过限定字数时,短信就会发送失败,此时就须要推断内容是否超过限制,假设不超过限制.就直接发送,反之.则对其进行处理再 ...

  5. Android 短信验证码控件

    Android 短信验证码控件,便于项目中使用统一样式,统一提示改动.个人觉得挺好用的 <span style="font-size:18px;">public cla ...

  6. Android 短信监听及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  7. Android短信监听软件

    本案例是在android手机中运行,是一个没有界面的短信监听软件.主要是用BroadcastReceiver来接受短信广播,当接收到短信后就跳转到service中来转发短信.哈哈,不是用来干坏事的.这 ...

  8. Android短信彩信收发流程(应用层)

    下图为ComposeMessageActivity中confirmSendMessageIfNeeded部分的信息发送流程.主要以接收者有效性的确认为主,然后转向sendMessage方法进行发送. ...

  9. android短信发送器源代码

    Activity类: import java.util.List;import android.app.Activity;import android.app.PendingIntent;import ...

随机推荐

  1. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  2. mongodb chunk 大小设置

    默认是64MB,取值范围是1 MB 到 1024 MB. 那改动会造成什么?下表简单总结: chunk size 调节 splitting次数(碎片数) 数据跨shard数目 数据均匀 网络传输次数 ...

  3. Asp.net core使用IIS在windows上进行托管

    摘要 最近项目中,尝试使用asp.net core开发,在部署的时候,考虑现有硬件,只能部署在windows上,linux服务器暂时没有. 部署注意事项 代码中启用iis和Kestrel public ...

  4. In House打包流程

    在一个app历经数周持续开发和多个版本快速内部迭代之后,当我们需要把这个版本发布到我们实际应用场景中,面对我们真实用户去say hi时,如果自身产品在发布(内测版本)之前确实找到一些潜在切相对稳定的种 ...

  5. 线程中sleep方法和wait方法有什么区别?(转)

    本文转自https://www.cnblogs.com/linkstar/p/6043846.html 线程中sleep方法和wait方法有什么区别?   如果你没有接触过java的多线程,那么多对于 ...

  6. Java集合框架顶层接口collectiion接口

    如何使用迭代器 通常情况下,你会希望遍历一个集合中的元素.例如,显示集合中的每个元素. 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合 ...

  7. Android 数据存储03之SQLite

    SQLite数据存储 Android 集成了 SQLite 数据库.它存储在 /data/data/< 项目文件夹 >/databases/ 下.Android 开发中使用 SQLite ...

  8. iOS objc_msgSend 报错解决方案

    错误代码: objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self); Too many arguments ...

  9. C#编程(五十五)----------HashSet和SortedSet

    集 饱含不重复元素的集合称为”集(set)”. .NET4包含两个集(HashSet<T>和SortedSet<T>),他们都实现ISet<T>接口.HashSet ...

  10. C#编程(二十四)----------修饰符

    修饰符 修饰符即应用于类型或成员的关键字.修饰符可以指定方法的可见性,如public或private,还可以指定一项的本质,如刚发的vritual或abstract. 可见性的修饰符 修饰符 应用于 ...