语音兰度短信
时间:2022-04-25
本文章向大家介绍语音兰度短信,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原理:获取来电短信内容,调用系统的语音朗读功能。
效果图:
具体代码如下:
1,获取短信息:
package com.internal.message;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.telephony.SmsMessage;
import android.test.suitebuilder.annotation.SmallTest;
public class SmsMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras == null)
return;
Object[] pdus = (Object[]) extras.get("pdus");
SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[0]);
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();
cursor=null;
}
// 启动消息显示器
Intent di = new Intent();
di.setClass(context, SmsReceivedDialog.class);
di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
di.putExtra(MsgAction.SMS_FROM_ADDRESS_EXTRA, fromAddress);
di.putExtra(MsgAction.SMS_FROM_DISPLAY_NAME_EXTRA, fromDisplayName);
di.putExtra(MsgAction.SMS_MESSAGE_EXTRA, message.getMessageBody().toString());
context.startActivity(di);
}
}
2,注册广播:
<receiver android:name="com.internal.message.SmsMessageReceiver" android:enabled="false">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
3,消息显示及朗读功能:
package com.internal.message;
import java.util.Locale;
import com.internal.main.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.util.Log;
public class SmsReceivedDialog extends Activity implements OnInitListener {
private static final String TAG = "SmsReceivedDialog";
private static final int DIALOG_SHOW_MESSAGE = 1;
private TextToSpeech mTts;
private String mFromDisplayName;
private String mFromAddress;
private String mMessage;
private String mFullBodyString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFromAddress = getIntent().getExtras().getString(MsgAction.SMS_FROM_ADDRESS_EXTRA);
mFromDisplayName = getIntent().getExtras().getString(MsgAction.SMS_FROM_DISPLAY_NAME_EXTRA);
mMessage = getIntent().getExtras().getString(MsgAction.SMS_MESSAGE_EXTRA);
mFullBodyString = String.format(
getResources().getString(R.string.sms_speak_string_format),
" "+mFromDisplayName,
"message said:"+mMessage);
showDialog(DIALOG_SHOW_MESSAGE);
mTts = new TextToSpeech(this, this);
}
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = mTts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e(TAG, "TTS language is not available.");
} else {
mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null);
}
} else {
// Initialization failed.
Log.e(TAG, "Could not initialize TTS.");
}
}
@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("replay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Intent i = new Intent();
i.setClass(SmsReceivedDialog.this, SendMsgActivity.class);
i.putExtra(MsgAction.SMS_RECIPIENT_EXTRA, mFromAddress);
startActivity(i);
dialog.dismiss();
finish();
}
})
.setNegativeButton("display", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
finish();
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
finish();
}
}).create();
}
return null;
}
@Override
protected void onDestroy() {
if (mTts != null) {
mTts.stop();
mTts.shutdown();
mTts=null;
}
super.onDestroy();
}
}
最后别忘了添加权限,要不不能读取信息呀!
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name = "android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS" />
- js中页面刷新和页面跳转的方法总结
- PixelBender(着色器)初体验
- Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇
- CSS好看的按钮
- Metaball(元球)效果学习
- ASP.NET MVC 4 RC的JS/CSS打包压缩功能
- 表格可在线编辑效果
- CSS侧边栏宽度不动(更改页面宽度时),内容区宽度自适应
- JS网页顶部弹出可关闭广告图层
- 未来会不会出现人类大脑与人工智能进行链接,而产生的超级大脑?
- android布局文件中android:icon="?attr/menuIconCamera"找不到对应图标路径
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构
- Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers: File exists处理
- 通过企业分布式缓存共享运行时数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 数据分析(一):NumPy 基础知识
- 每日一题 | 环形排列问题
- 每日一题 | QQ群撩妹问题
- 每日一题 | 老板出的下棋问题
- Qt音视频开发12-mpv解码播放
- 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
- 每日一题 | 土豪割草问题
- 高阶面试:伯努利过程
- Python 分析电影《南方车站的聚会》
- Python 基础(十八):命名空间 & 作用域
- Python爬虫(三):BeautifulSoup库
- Python 爬虫(四):Selenium 框架
- Python 爬虫(五):PyQuery 框架
- Python 爬虫(六):Scrapy 爬取景区信息
- Python 爬虫(七):pyspider 使用