本人有点懒,没有什么注释,一个主页面,第三方的包自己去科大讯飞下载
主页
package com.example.zn;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.Adler32;
import com.example.zn.WodrBean.WsBean;
import com.google.gson.Gson;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private String yuyan = "xiaoyan";
String daihao[] = { "xiaoyan", "xiaoyu", "catherine", "vixr", "vixk",
"vixqa", "vinn", "Mariane", "Allabent", "Gabriela", "Abha",
"XiaoYun" };
private SpeakListenUtils utils;
private ListView lv;
// 存放 说和听的消息
private List<MessageBean> allMessage = new ArrayList<MessageBean>();
private MyAdapter adapter;
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return allMessage.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return allMessage.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
// 判断是否有缓存
if (convertView == null) {
// 没有缓存
convertView = View.inflate(getApplicationContext(),
R.layout.list_item, null);
viewHolder = new ViewHolder();
viewHolder.tv_answer = (TextView) convertView
.findViewById(R.id.tv_answer);
viewHolder.tv_asker = (TextView) convertView
.findViewById(R.id.tv_asker);
viewHolder.iv_answer = (ImageView) convertView
.findViewById(R.id.iv_answer);
viewHolder.ll_answer = (LinearLayout) convertView
.findViewById(R.id.ll_answer);
convertView.setTag(viewHolder);
} else {
// 有缓存
viewHolder = (ViewHolder) convertView.getTag();
}
// 设置数据
MessageBean messageBean = allMessage.get(position);
// 获取当前的消息
if (messageBean.type == MessageBean.ASKER) {
// 问
// 设置view的显示
viewHolder.tv_asker.setVisibility(View.VISIBLE);
// 答的组件隐藏
viewHolder.tv_answer.setVisibility(View.GONE);
viewHolder.iv_answer.setVisibility(View.GONE);
viewHolder.ll_answer.setVisibility(View.GONE);
// 设置信息的显示
viewHolder.tv_asker.setText(messageBean.message);
String trim = viewHolder.tv_asker.getText().toString().trim();
utils.speak(trim, yuyan);
} else {
// 答
// 设置view的隐藏
viewHolder.tv_asker.setVisibility(View.GONE);
// 答的组件显示
viewHolder.ll_answer.setVisibility(View.VISIBLE);
viewHolder.tv_answer.setVisibility(View.VISIBLE);
viewHolder.tv_answer.setText(messageBean.message);
String trim = viewHolder.tv_answer.getText().toString().trim();
utils.speak(trim, yuyan);
// 看看是否有图片
if (messageBean.picid == -1) {
viewHolder.iv_answer.setVisibility(View.GONE);
} else {
viewHolder.iv_answer.setVisibility(View.VISIBLE);
viewHolder.iv_answer.setImageResource(messageBean.picid);
}
}
return convertView;
}
private class ViewHolder {
TextView tv_asker;
ImageView iv_answer;
TextView tv_answer;
LinearLayout ll_answer;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_LEFT_ICON);
// 听和说的工具类
utils = new SpeakListenUtils(this);
init();
}
public void tvyy(View v) {
final AlertDialog.Builder alert = new AlertDialog.Builder(
MainActivity.this);
final AlertDialog dialog = alert.create();
View view = View.inflate(getApplicationContext(), R.layout.yuyan_item,
null);
ListView listView = (ListView) view.findViewById(R.id.lv_yy);
dialog.setView(view);
MyYYAdapter adapter = new MyYYAdapter(MainActivity.this);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
yuyan = daihao[position];
dialog.dismiss();
}
});
Button button=(Button) view.findViewById(R.id.button_fanhui);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();// 在按键响应事件中显示此对话框
}
private void init() {
setContentView(R.layout.activity_main);
// 显示说和听的信息
lv = (ListView) findViewById(R.id.lv);
adapter = new MyAdapter();
lv.setAdapter(adapter);
}
public void listen(View view) {
utils.listen(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult arg0, boolean arg1) {
// 把说的话转成json文字
System.out.println(arg0.getResultString() + "---");
// gson解析结果
Gson gson = new Gson();
WodrBean wodrBean = gson.fromJson(arg0.getResultString(),
WodrBean.class);
// 打每个汉子拼成一句话
StringBuilder builder = new StringBuilder();
for (WsBean ws : wodrBean.getWs()) {
builder.append(ws.getCw().get(0).getW());
}
// 判断是不是标点符号
if (builder.length() <= 1) {
return;
}
// 根据消息的内容动态回复消息
MessageBean msg = new MessageBean();
// 把说的话消息封装
msg.message = builder + "";
msg.type = MessageBean.ASKER;
// 把说的信息放到容器
allMessage.add(msg);
// 智能回答
MessageBean answer = answer(builder + "");
// 把说的信息放到容器
allMessage.add(answer);
// 更新界面
adapter.notifyDataSetChanged();
}
@Override
public void onError(SpeechError arg0) {
// TODO Auto-generated method stub
}
});
}
/**
* 说的话
*
* @param word
* 智能说的话
* @return
*/
public MessageBean answer(String word) {
MessageBean msg = new MessageBean();
msg.type = MessageBean.ANSWER;
if (word.contains("美女")) {
// 获取文字
msg.message = AnswerMseeage.getMVDesc();
// 获取图片
msg.picid = AnswerMseeage.getMVPics();
} else if (word.contains("帅")) {
msg.message = AnswerMseeage.getShuai();
}
return msg;
}
}
布局文件主页面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:text="更换语言"
android:textSize="20sp"
android:textColor="#f00"
android:background="@drawable/m5"
android:gravity="center"
android:onClick="tvyy"
/>
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:cacheColorHint="#00000000"
android:dividerHeight="0dp" >
</ListView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="60dp"
android:background="@drawable/m3" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/bt_selector"
android:gravity="center_horizontal"
android:onClick="listen"
package com.example.zn;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import android.content.Context;
import android.os.Bundle;
import android.text.NoCopySpan.Concrete;
import android.util.Log;
public class SpeakListenUtils {
private Context context;
public SpeakListenUtils(Context context) {
this.context = context;
SpeechUtility
.createUtility(context, SpeechConstant.APPID + "=582bd091");
}
/**
* 把说的话转成文字
* 监听回调结果,创建次监听器处理json文件
*/
public void listen(RecognizerDialogListener listener) {
InitListener mInitListener = new InitListener() {
@Override
public void onInit(int arg0) {
// TODO Auto-generated method stub
}
};
// 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener
RecognizerDialog iatDialog = new RecognizerDialog(context,
mInitListener);
// 2.设置听写参数,同上节
// 3.设置回调接口
iatDialog.setListener(listener);
// 4.开始听写
iatDialog.show();
}
/**
* 把文字转成语音
* text 输入的文字
* name 输入的语言
*/
public void speak(String text,String name) {
SpeechSynthesizer mTts = SpeechSynthesizer
.createSynthesizer(context, null);
// 设置发音人
mTts.setParameter(SpeechConstant.VOICE_NAME, name);
// 设置语速
mTts.setParameter(SpeechConstant.SPEED, "60");
// 设置音量
mTts.setParameter(SpeechConstant.VOLUME, "80");
// 设置云端
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "/sdcard/iflytek.pcm");
mTts.startSpeaking(text,new SynthesizerListener() {
@Override
public void onSpeakResumed() {
// TODO Auto-generated method stub
}
@Override
public void onSpeakProgress(int arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onSpeakPaused() {
// TODO Auto-generated method stub
}
@Override
public void onSpeakBegin() {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
// TODO Auto-generated method stub
}
@Override
public void onCompleted(SpeechError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
// TODO Auto-generated method stub
}
});
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 说的消息 -->
<TextView
android:id="@+id/tv_asker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="#777888"
android:gravity="center"
android:visibility="gone" />
<LinearLayout
android:id="@+id/ll_answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#555577"
android:orientation="vertical"
android:visibility="gone" >
<!-- 答 -->
<TextView
android:id="@+id/tv_answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_answer"
android:layout_width="match_parent"
android:scaleType="fitStart"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
//bean 类,两个bean类
package com.example.zn;
/**
* 描述说和听的消息
* @author Administrator
*
*/
public class MessageBean {
public int type;
public String message;
public int picid=-1;
public static final int ASKER=1;//记录标记 说
public static final int ANSWER=2;//记录标记 答
}
package com.example.zn;
//解析json类
import java.util.List;
/**
* Created by Administrator on 2016/11/16.
*/
public class WodrBean {
/**
* sn : 1
* ls : false
* bg : 0
* ed : 0
* ws : [{"bg":0,"cw":[{"sc":0,"w":"怎么"}]},{"bg":0,"cw":[{"sc":0,"w":"了"}]}]
*/
private int sn;
private boolean ls;
private int bg;
private int ed;
/**
* bg : 0
* cw : [{"sc":0,"w":"怎么"}]
*/
private List<WsBean> ws;
public int getSn() {
return sn;
}
public void setSn(int sn) {
this.sn = sn;
}
public boolean isLs() {
return ls;
}
public void setLs(boolean ls) {
this.ls = ls;
}
public int getBg() {
return bg;
}
public void setBg(int bg) {
this.bg = bg;
}
public int getEd() {
return ed;
}
public void setEd(int ed) {
this.ed = ed;
}
public List<WsBean> getWs() {
return ws;
}
public void setWs(List<WsBean> ws) {
this.ws = ws;
}
public static class WsBean {
private int bg;
/**
* sc : 0.0
* w : 怎么
*/
private List<CwBean> cw;
public int getBg() {
return bg;
}
public void setBg(int bg) {
this.bg = bg;
}
public List<CwBean> getCw() {
return cw;
}
public void setCw(List<CwBean> cw) {
this.cw = cw;
}
public static class CwBean {
private double sc;
private String w;
public double getSc() {
return sc;
}
public void setSc(double sc) {
this.sc = sc;
}
public String getW() {
return w;
}
public void setW(String w) {
this.w = w;
}
}
}
}
数据类自己放的一些数据,也可以改为请求,看自己的想法
package com.example.zn;
/**
* 智能回答的消息
*
* @author Administrator
*
*/
public class AnswerMseeage {
public static final String shuai[] = { "---最帅", "---最酷", "--没谁啦", "你说呢!嗯哼" };
public static final String mv[] = { "这个适合你", "这个咋么样", "这个还不错", "这个最靓的" };
public static final int mvPics[] = { R.drawable.m1, R.drawable.m2,
R.drawable.m3, R.drawable.m4, R.drawable.m5 };
public static String getShuai() {
int index = (int) (Math.random() * shuai.length);
return shuai[index];
}
public static String getMVDesc() {
int index = (int) (Math.random() * mv.length);
return mv[index];
}
public static int getMVPics() {
int index = (int) (Math.random() * mvPics.length);
return mvPics[index];
}
}
//adapter 你们懂得
package com.example.zn;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyYYAdapter extends BaseAdapter {
String name[] = { "小燕,青年女声普通话", "小宇,中英文普通话", "凯瑟琳,青年女声英文", "小蓉,青年女声汉语四川话",
"小坤,青年男声汉语河南话", "小强,青年男声汉语湖南话", "楠楠,童年女声汉语普通话", "Mariane,法语",
"Allabent,俄语", "Gabriela,西班牙语", "Abha,印地语", "XiaoYun,越南语" };
Context context;
public MyYYAdapter(Context context) {
super();
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return name.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return name[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = View.inflate(context, R.layout.yy_item, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.tv_yuyin);
textView.setText(name[position]);
return convertView;
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lv_yy"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:dividerHeight="2dp" >
</ListView>
<Button
android:id="@+id/button_fanhui"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f336"
android:text="返回" />
</LinearLayout>