语音兰度短信

原理:获取来电短信内容,调用系统的语音朗读功能。

效果图:

具体代码如下:

1,获取短信息:

[html] view plaincopy

  1. package com.internal.message;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.database.Cursor;  
  7. import android.net.Uri;  
  8. import android.os.Bundle;  
  9. import android.provider.ContactsContract;  
  10. import android.telephony.SmsMessage;  
  11. import android.test.suitebuilder.annotation.SmallTest;  
  12.   
  13. public class SmsMessageReceiver extends BroadcastReceiver {  
  14.      
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         Bundle extras = intent.getExtras();  
  18.         if (extras == null)  
  19.             return;  
  20.   
  21.         Object[] pdus = (Object[]) extras.get("pdus");  
  22.   
  23.             SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[0]);  
  24.             String fromAddress = message.getOriginatingAddress();  
  25.             String fromDisplayName = fromAddress;  
  26.   
  27.             Uri uri;  
  28.             String[] projection;  
  29.   
  30.             uri = Uri.withAppendedPath(  
  31.                     ContactsContract.PhoneLookup.CONTENT_FILTER_URI,  
  32.                     Uri.encode(fromAddress));  
  33.             projection = new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME };  
  34.   
  35.             // 查找联系人  
  36.             Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);  
  37.             if (cursor != null) {  
  38.                 if (cursor.moveToFirst())  
  39.                     fromDisplayName = cursor.getString(0);  
  40.   
  41.                 cursor.close();  
  42.                 cursor=null;  
  43.             }  
  44.   
  45.             // 启动消息显示器  
  46.             Intent di = new Intent();  
  47.             di.setClass(context, SmsReceivedDialog.class);  
  48.             di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);  
  49.             di.putExtra(MsgAction.SMS_FROM_ADDRESS_EXTRA, fromAddress);  
  50.             di.putExtra(MsgAction.SMS_FROM_DISPLAY_NAME_EXTRA, fromDisplayName);  
  51.             di.putExtra(MsgAction.SMS_MESSAGE_EXTRA, message.getMessageBody().toString());  
  52.             context.startActivity(di);  
  53.     
  54.     }  
  55.       
  56. }  

2,注册广播:

[html] view plaincopy

  1. <receiver android:name="com.internal.message.SmsMessageReceiver" android:enabled="false">  
  2.             <intent-filter>  
  3.                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />  
  4.             </intent-filter>  
  5.         </receiver>  

3,消息显示及朗读功能:

[html] view plaincopy

  1. package com.internal.message;  
  2.   
  3. import java.util.Locale;  
  4.   
  5. import com.internal.main.R;  
  6.   
  7. import android.app.Activity;  
  8. import android.app.AlertDialog;  
  9. import android.app.Dialog;  
  10. import android.content.DialogInterface;  
  11. import android.content.Intent;  
  12. import android.os.Bundle;  
  13. import android.speech.tts.TextToSpeech;  
  14. import android.speech.tts.TextToSpeech.OnInitListener;  
  15. import android.util.Log;  
  16.   
  17.   
  18. public class SmsReceivedDialog extends Activity implements OnInitListener {  
  19.       
  20.     private static final String TAG = "SmsReceivedDialog";  
  21.     private static final int DIALOG_SHOW_MESSAGE = 1;  
  22.   
  23.     private TextToSpeech mTts;  
  24.     private String mFromDisplayName;  
  25.     private String mFromAddress;  
  26.     private String mMessage;  
  27.     private String mFullBodyString;  
  28.   
  29.     @Override  
  30.     protected void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.   
  33.         mFromAddress = getIntent().getExtras().getString(MsgAction.SMS_FROM_ADDRESS_EXTRA);  
  34.         mFromDisplayName = getIntent().getExtras().getString(MsgAction.SMS_FROM_DISPLAY_NAME_EXTRA);  
  35.         mMessage = getIntent().getExtras().getString(MsgAction.SMS_MESSAGE_EXTRA);  
  36.   
  37.         mFullBodyString = String.format(  
  38.                 getResources().getString(R.string.sms_speak_string_format),  
  39.                 " "+mFromDisplayName,  
  40.                 "message said:"+mMessage);  
  41.   
  42.         showDialog(DIALOG_SHOW_MESSAGE);  
  43.         mTts = new TextToSpeech(this, this);  
  44.     }  
  45.   
  46.     public void onInit(int status) {  
  47.         if (status == TextToSpeech.SUCCESS) {  
  48.             int result = mTts.setLanguage(Locale.US);  
  49.             if (result == TextToSpeech.LANG_MISSING_DATA  
  50.                     || result == TextToSpeech.LANG_NOT_SUPPORTED) {  
  51.                 Log.e(TAG, "TTS language is not available.");  
  52.             } else {  
  53.                 mTts.speak(mFullBodyString, TextToSpeech.QUEUE_ADD, null);  
  54.             }  
  55.         } else {  
  56.             // Initialization failed.  
  57.             Log.e(TAG, "Could not initialize TTS.");  
  58.         }  
  59.     }  
  60.   
  61.     @Override  
  62.     protected Dialog onCreateDialog(int id) {  
  63.         switch (id) {  
  64.         case DIALOG_SHOW_MESSAGE:  
  65.             return new AlertDialog.Builder(this)  
  66.                     .setIcon(android.R.drawable.ic_dialog_email)  
  67.                     .setTitle("Message Received")  
  68.                     .setMessage(mFullBodyString)  
  69.                     .setPositiveButton("replay", new DialogInterface.OnClickListener() {  
  70.                         public void onClick(DialogInterface dialog, int whichButton) {  
  71.                               
  72.                             Intent i = new Intent();  
  73.                             i.setClass(SmsReceivedDialog.this, SendMsgActivity.class);  
  74.                             i.putExtra(MsgAction.SMS_RECIPIENT_EXTRA, mFromAddress);  
  75.                             startActivity(i);  
  76.   
  77.                             dialog.dismiss();  
  78.                             finish();  
  79.                         }  
  80.                     })  
  81.                     .setNegativeButton("display", new DialogInterface.OnClickListener() {  
  82.                         public void onClick(DialogInterface dialog, int whichButton) {  
  83.                             dialog.dismiss();  
  84.                             finish();  
  85.                         }  
  86.                     })  
  87.                     .setOnCancelListener(new DialogInterface.OnCancelListener() {  
  88.                         public void onCancel(DialogInterface dialog) {  
  89.                             finish();  
  90.                         }  
  91.                     }).create();  
  92.         }  
  93.         return null;  
  94.     }  
  95.       
  96.     @Override  
  97.     protected void onDestroy() {  
  98.         if (mTts != null) {  
  99.             mTts.stop();  
  100.             mTts.shutdown();  
  101.             mTts=null;  
  102.         }  
  103.         super.onDestroy();  
  104.     }  
  105.       
  106. }  

最后别忘了添加权限,要不不能读取信息呀!

 <uses-permission android:name="android.permission.READ_CONTACTS" />

[java] view plaincopy

  1. <uses-permission android:name = "android.permission.READ_PHONE_STATE"/>  
  2.     <uses-permission android:name="android.permission.RECEIVE_SMS"/>  
  3.    <uses-permission android:name="android.permission.READ_SMS"/>  
  4.    <uses-permission android:name="android.permission.SEND_SMS" />  
时间: 2024-10-25 10:23:50

语音兰度短信的相关文章

C#中实现语音朗读(短信 &amp;amp; 语音短信)sms

一个项目中,客户要求实现给集团公司员工发送短信如,拜年短信等.另,支持给领导发送语音短信 .实现方法如下. 1.群发短信有几种方式: 1.1 短信猫:一个普通的工控机,插入SIM卡,可以通过接口的方式发送短信,点对点发送,到达 率快准确,但是呼出的号码是普通的手机号码.缺点:移动对SIM卡的限制是每小时200条,发送太多会 锁卡.目前短信猫有8端口的,即1小时最多能发送1600条.每条短信的价格为0.1元. 技术实现: 一般配合短信猫有SDK组件,才共享数据库作为接口.定义4个表:待发送表,发送

云之讯语音、短信验证码实现

使用云之讯语音验证码功能,需要到云之讯开放平台去注册对应的账号,才能使用. 这里http://www.ucpaas.com/doc/doc_rest3-2.jsp 是官方文档 ,需要自己研究第一行文字,才能 明白业务功能的实现点. 下面是一个封装好的类,针对使用该SDK的帮助类: // // HYBUCSSDKHelper.h // UCSVoiceOrSMSVerifyCodeDemo // // Created by 黄仪标 on 15/2/2. // #import <Foundation

普通短信大变身:能听语音能传照片

如果有一个能让你的普通文字短信立即变身为能看图片.能听语音的"超级短信",当然,还是一毛一条的方法,你愿不愿意用用? 近日,搜狗发布了手机输入法安卓平台3.0正式版,新增的多媒体输入功能,实现了在普通文字短信中插入图片.声音,就能在对方手机短信界面中直接展示的功能.已经体验过的用户纷纷赞不绝口,这也许标志着手机"超级短信"的时代正在到来. "超级短信"功能不用申请即可开通,只要你有一部安卓手机,只要升级到最新的搜狗手机输入法3.0正式版,发语音.

中秋祝福微信打败短信 但不会取代

在刚过去的中秋节,以往火爆的手机短信祝福方式受到了市民们的冷落,而微信则异军突起,人们在网上大晒各种"美食.聚会和旅行"的图片,导致微信朋友圈的信息量暴 涨至平时两倍,甚至还出现拥堵现象.短信这种传统的信息发布方式会不会被微信取代?有专家说,尽管越来越多的用户倾向使用微信,包括"短信祝福"等习惯也正在被微信改变,但短信还不会被微信完全取代.短信:上半年减5%市民种小姐说,每逢中秋节,发送短信祝福是一大乐事,嘀嘀嘀的短信声给节日带来不少欢乐,今年却很少听到了.记者从运

与微信拜年形成鲜明对比的是,短信拜年这种方式开始日渐式微

与微信拜年形成鲜明对比的是,短信拜年这种方式开始日渐式微.以往,手机短信拜年和电话拜年还是广州人春节拜年的最主要方式,去年的一项调查显示,高达61%的被访者还是选择用手机短信拜年.但在今年,手机短信拜年的热度明显降低. 据统计数据显示,在2009年,全国春节期间的短信180亿条,2010年超过230亿条,而到2012年春节期间则达到320亿条以上.但在这两年,随着微信.微博等工具的替代使用,短信拜年这种形式日渐遇冷.市民何先生说:"以往春节都会收到上百条手机短信,今年只收到了十多条,大多数都是通

Namecheap重置账户密码以及设置双重手机短信验证确保账户安全

今天老左登录Namecheap准备看看是否有域名即将到期需要续费(我有个习惯,每月初会登录账户看看将最近1-2个月到期的域名全部续费),和往常一样打开NC官网以及输入账户和密码,但是很奇怪连续测试两次都无法登陆账户(开始冒汗),而且有提示框出来并不是提示密码不对,而是有安全窗口.     虽然看到的不是提示密码不对,但还是有点紧张的,应该是账户密码机制出现问题了.原密码输入是无法进去的,可以肯定密码是对的,应该是密码过分简单或者是可能长期没有修改,也可能是因为没有设置双重密码验证(Two-Fac

元旦盘点:短信群发利器,个信成首选

"元 旦一到,手指就抖"每逢佳节,必定是短信发送高峰.批量发送的短信,常常让我们的手指疲惫不堪,所以每年这个时候,给手机安装上一款可以支持群发的软件, 绝对是应付过节短信的不二选.从外国到国内,大家几乎有过这样的类似经历,所以各种为手指减负的.有趣的群发软件也就应声而出. Group SMS & Scheduler:组队发送 如何让群发变得方便?这款<Group SMS & Scheduler> 给出的解决方法是,按群组选择.比如给家里人发亲情味浓的,给工作

嗨,“听见”我的短信了吗?

玩过对讲机吧,只要在一定范围内轻轻按住按钮,便可及时与对方通话.不过这样似乎还不够如意,如果可以不愁距离,随时对讲,并且可以在免费的情况下反复重听对讲内容,相信你我都会万分赞同.   事实上,拥有这种"对讲"功能的个信软件正受到越来越多手机用户的青睐,这种语音短信互发的新方式让你只需轻轻按住好友头像下的"录音键",对着手机说话完毕后再松开,便可将自己的声音以短信方式"准确"且"原汁原味"的传送到朋友那里. "保持通话

谷歌在非洲地区战略:推动SMS短信搜索和SMS短信交易

北京时间6月30日凌晨消息,据国外媒体报道,著名科技博客作者埃里克·施恩菲尔德(Erick Schonfeld)今天撰文称,谷歌在非洲地区的战略是推动SMS短信搜索和通过SMS短信进行的交易. 施恩菲尔德写道:"谷歌不只是希望将世界上所有的信息组织到一起,同时也希望让世界所有人都能获得所有信息.从全球大多数人的角度来说,这意味着谷歌要通过普通手机来传递信息,而不是通过价格昂贵的iPhone或带有网络浏览器的Android手机.我所说的普通手机是指10美元就能买到的手机,这种手机除了语音和SMS短