首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
int
process
dockerfile
python
node.js
expression
c语言
hashcode
rsa
callback
frameworks
web3
get
md5
function
jar
config
main
数组
plugins
tags
hash
hook
runtime
request
header
input
cpython
buffer
merge
perl
cookie
grid
web
java
heap
substring
random
bitmap
netty
nodejs
javascript
bash
dagger
golang
erlang
emoji
replace
string
range
integer
utf-8
vba
window
foreach
join
ip
python2
stream
future
yaml
chat
hashtable
iostream
email
sum
version
schema
cPlusPlus
command
heatmap
subset
less
export
php8
io
bit
python3
const
当前位置:
开发笔记
>
编程语言
> 正文
语音兰度短信
作者:铲除飞网败类 | 来源:互联网 | 2023-09-06 16:49
原理:获取来电短信内容,调用系统的语音朗读功能。效果图:具体代码如下:1,获取短信息:[html]viewplaincopypackagecom.internal.message;imp
原理:获取来电短信内容,调用系统的语音朗读功能。
效果图:
具体代码如下:
1,获取短信息:
[html]
view plaincopy
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,注册广播:
[html]
view plaincopy
<
receiver
android:name
=
"com.internal.message.SmsMessageReceiver"
android:enabled
=
"false"
>
<
intent-filter
>
<
action
android:name
=
"android.provider.Telephony.SMS_RECEIVED"
/>
intent-filter
>
receiver
>
3,消息显示及朗读功能:
[html]
view plaincopy
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();
}
}
最后别忘了添加权限,要不不能读取信息呀!
[java]
view plaincopy
"android.permission.READ_PHONE_STATE"
/>
"android.permission.RECEIVE_SMS"
/>
"android.permission.READ_SMS"
/>
"android.permission.SEND_SMS"
/>
html
view
copy
package
int
android
import
cas
text
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
get
Android开发笔记:使用Picasso加载网络图片等比例缩放
在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ...
[详细]
蜡笔小新 2023-12-14 17:34:00
get
Linux重启网络命令实例及关机和重启示例教程
本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ...
[详细]
蜡笔小新 2023-12-14 15:52:52
get
android listview OnItemClickListener失效原因
最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ...
[详细]
蜡笔小新 2023-12-14 14:25:50
main
OC学习笔记之@property和@synthesize
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
main
关于cuowu类的错误提示和使用AdjustmentListener的问题
本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ...
[详细]
蜡笔小新 2023-12-13 22:09:56
jar
XML介绍与使用的概述及标签规则
本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ...
[详细]
蜡笔小新 2023-12-13 17:39:50
get
自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ...
[详细]
蜡笔小新 2023-12-13 14:41:31
buffer
Java太阳系小游戏分析和源码详解
本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ...
[详细]
蜡笔小新 2023-12-14 19:53:34
数组
在类中定义数组时出错 - Error on defining arrays in class
Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ...
[详细]
蜡笔小新 2023-12-14 17:38:12
数组
Java实现大数乘法(分治算法)
本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ...
[详细]
蜡笔小新 2023-12-14 15:43:50
main
求解hdu 1003 java题目的动态规划优化方法
本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ...
[详细]
蜡笔小新 2023-12-14 13:11:00
input
如何在有序字符序列中插入新字符并保持有序
本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ...
[详细]
蜡笔小新 2023-12-14 11:16:33
get
使用 Ubuntu 中的 Python 获取浏览器历史记录
使用Ubuntu中的Python获取浏览器历史记录原文: ...
[详细]
蜡笔小新 2023-12-14 08:57:59
hash
Spring特性实现接口多类的动态调用详解
本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ...
[详细]
蜡笔小新 2023-12-14 03:24:19
input
不同优化算法的比较分析及实验验证
本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ...
[详细]
蜡笔小新 2023-12-13 16:05:14
铲除飞网败类
这个家伙很懒,什么也没留下!
Tags | 热门标签
int
process
dockerfile
python
node.js
expression
c语言
hashcode
rsa
callback
frameworks
web3
get
md5
function
jar
config
main
数组
plugins
tags
hash
hook
runtime
request
header
input
cpython
buffer
merge
RankList | 热门文章
1
Vuex安装时报错“Could not resolve dependency: npm ERR peer vue@“^3.0.2“ from vuex@4.0.2”
2
写给迷茫的你:九年京东测试工程师的职业规划思考!
3
程序员面试金典面试题 16.02. 单词频率
4
Docker之镜像管理(三)
5
node.js 模块_如何创建Node JS可重用模块
6
如何用SceneForm实现子弹射击并绘制子弹运行轨迹
7
b 计数器位选信号 verilog_Verilog:笔试面试常考易错点整理
8
java ee 程序_第一个 JavaEE 应用程序JavaWeb 入门开发教程
9
Percona Data Recovery Tool 单表恢复
10
Ubuntu secure CRT和filezilla 工具配置
11
Java 中的 SPI 机制是什么鬼?高级 Java 必须掌握!
12
远程访问×××——Easy ×××
13
iOS App 上架内购3.1.1问题被拒解决怎么理解
14
应广单片机例程,应广单片机
15
GARFIELD@12262004
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有