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

效果图:

android 语音朗读短消息_第1张图片

具体代码如下:

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" />



更多相关文章

  1. 13-7-5 android Tabhost功能实现
  2. Android消息通知Totast的实现
  3. android分享功能的实现(分享到微博空间等)
  4. Android应用程序键盘(Keyboard)消息处理机制分析(23)
  5. android实现发送Email功能(从相册中选择图片作为附件)
  6. android 剪切板 (粘贴复制功能)
  7. Android 广播------实现强制下线功能
  8. Android 不集成支付宝sdk实现收款功能 通过Intent调起支付宝支付
  9. android 蓝牙4.0广播功能应用

随机推荐

  1. Android视频录制
  2. android之【部分控件】
  3. Android设计一个答题APP
  4. Android(安卓)Studio使用github教程
  5. Android一些常用的颜色值
  6. 10 Alternative Android(安卓)App Stores
  7. Android(安卓)加密解密
  8. Spinner选择框应用
  9. Android~~布局Layout
  10. android拍照相册工具类