android 语音朗读短消息
来源:互联网 发布:gltools王者荣耀优化 编辑:程序博客网 时间:2024/04/29 17:34
原理:获取来电短信内容,调用系统的语音朗读功能。
效果图:
具体代码如下:
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>
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" />
- android 语音朗读短消息
- android 中文朗读 语音朗读 tts朗读
- android 语音朗读单词
- Android 轻松实现语音朗读
- android 中文语音朗读文本
- Android中用TTS语音朗读一段英文
- Android开发之中文语音朗读
- 基于Google的嵌入式系统android开发语音技术(语音搜索,语音朗读文章,语音控制)
- [Android实例] 【Sundy系列】全看懂了-加两年经验-语音朗读-语音识别-语音
- C#语音朗读
- C#语音朗读
- C#语音朗读
- C#语音朗读
- C#语音朗读
- 语音朗读(VBA)
- TTS语音朗读
- TTS语音朗读
- c#语音朗读类
- SQL Server XML基础学习<3>之--FOR XML EXPLICIT
- 第十一周任务大奖赛2
- 编译错误build error
- delphi下不同线程发送字符串示例
- Android中不规则图片按钮透明区域的点击效果
- android 语音朗读短消息
- boost assign
- JSP内置对象
- 换分币
- ASP.NET MVC前端提交List<Model>到controller
- 异步调用方法
- C++ 中 explicit 关键字的作用
- Xampp中Apache无法启动的端口问题解决
- Java 通道基础