Android编程实现短信收发及语音播报提示功能示例
发布时间 - 2026-01-11 02:54:30 点击率:次本文实例讲述了Android编程实现短信收发及语音播报提示功能。分享给大家供大家参考,具体如下:

发送短信功能界面
/**
* 发送短信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示例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android短信与电话操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作json格式数据技巧总结》、《Android编程之activity操作技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 短信收发
# 语音播报
# 提示
# 详解Android 语音播报实现方案(无SDK)
# 上午
# 发送短信
# 操作技巧
# 请输入
# 短信内容
# 跳转到
# 进阶
# 相关内容
# 感兴趣
# 给大家
# 点击此处
# 管理器
# 更多关于
# 所述
# 程序设计
# 不可用
# 短信功能
# 后处理
# 讲述了
# setEnabled
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何处理异常和错误?(Handler示例)
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
js代码实现下拉菜单【推荐】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Python制作简易注册登录系统
Laravel如何处理CORS跨域请求?(配置示例)
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
公司门户网站制作流程,华为官网怎么做?
HTML 中动态设置元素 name 属性的正确语法详解
Python图片处理进阶教程_Pillow滤镜与图像增强
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何实现用户密码重置功能?(完整流程代码)
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
使用豆包 AI 辅助进行简单网页 HTML 结构设计
如何在Windows环境下新建FTP站点并设置权限?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
微信小程序 input输入框控件详解及实例(多种示例)
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何挑选优质建站一级代理提升网站排名?
Bootstrap CSS布局之列表
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
,怎么在广州志愿者网站注册?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何快速搭建安全的FTP站点?
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
电商网站制作价格怎么算,网上拍卖流程以及规则?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
简历没回改:利用AI润色让你的文字更专业
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何在腾讯云免费申请建站?
如何快速上传建站程序避免常见错误?
node.js报错:Cannot find module 'ejs'的解决办法
MySQL查询结果复制到新表的方法(更新、插入)
Laravel集合Collection怎么用_Laravel集合常用函数详解
免费网站制作appp,免费制作app哪个平台好?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)

