package com.sogou.fastomiai; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.android.volley.Response; import com.android.volley.VolleyError; import com.libra.sinvoice.LogHelper; import com.libra.sinvoice.SinVoicePlayer; import com.libra.sinvoice.SinVoiceRecognition; import com.sogou.fastomiai.controller.SessionManager; import com.sogou.fastomiai.model.InviteFinishInfo; import com.sogou.fastomiai.util.Constants; import com.sogou.fastomiai.util.NetworkRequest; import com.sogou.fastomiai.util.NetworkUtil; public class MeetingActivity extends Activity implements SinVoiceRecognition.Listener, SinVoicePlayer.Listener { private final static String TAG = "MeetingActivity"; private final static int MAX_NUMBER = 5; private final static int MSG_SET_RECG_TEXT = 1; private final static int MSG_RECG_START = 2; private final static int MSG_RECG_END = 3; private final static String CODEBOOK = "12345"; private Handler mHandler; private SinVoicePlayer mSinVoicePlayer; private SinVoiceRecognition mRecognition; private String mText; private TextView mTextTip; private TextView mTextGift; private final static int MSG_LENGTH = 7; private int mCountDown = 4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_meeting); mSinVoicePlayer = new SinVoicePlayer(CODEBOOK); mSinVoicePlayer.setListener(this); mRecognition = new SinVoiceRecognition(CODEBOOK); mRecognition.setListener(this); mRecognition.start(); mText = genText(7); mSinVoicePlayer.play(mText, true, 1000); mHandler = new Handler() { private StringBuilder mTextBuilder = new StringBuilder(); private boolean isOneMoreTime = false; @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_SET_RECG_TEXT: char ch = (char) msg.arg1; mTextBuilder.append(ch); break; case MSG_RECG_START: mTextBuilder.delete(0, mTextBuilder.length()); break; case MSG_RECG_END: mCountDown--; if (mCountDown <= 0) { meetingSuccess(); } else { //Toast.makeText(getApplicationContext(), mTextBuilder.toString(), Toast.LENGTH_SHORT).show(); } LogHelper.d(TAG, "recognition end"); break; } super.handleMessage(msg); } }; mTextTip = (TextView)findViewById(R.id.meeting_tip); mTextGift = (TextView)findViewById(R.id.meeting_gift); } private void meetingSuccess() { mRecognition.stop(); mSinVoicePlayer.stop(); Toast.makeText(getApplicationContext(), "确认见面成功", Toast.LENGTH_SHORT).show(); mTextGift.setVisibility(View.VISIBLE); mTextTip.setText(R.string.meeting_tip_success); SessionManager sm = SessionManager.getInstance(this); String token = sm.getToken(); if (token.isEmpty()) { } else { Map<String, String> params = new HashMap<String, String>(); params.put(Constants.TOKEN, token); String url = NetworkUtil.getUrl(Constants.INVITE_FINISH_URL, params); NetworkRequest.get(url, InviteFinishInfo.class, new Response.Listener<InviteFinishInfo>() { @Override public void onResponse(InviteFinishInfo info) { if (info != null) { if (info.isSuccess()) { } else { } } else { } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }, false); } } private String genText(int count) { StringBuilder sb = new StringBuilder(); int pre = 0; while (count > 0) { int x = (int) (Math.random() * MAX_NUMBER + 1); if (Math.abs(x - pre) > 0) { sb.append(x); --count; pre = x; } } return sb.toString(); } @Override protected void onPause() { super.onPause(); mRecognition.stop(); mSinVoicePlayer.stop(); } @Override public void onRecognitionStart() { mHandler.sendEmptyMessage(MSG_RECG_START); } @Override public void onRecognition(char ch) { mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_RECG_TEXT, ch, 0)); } @Override public void onRecognitionEnd() { mHandler.sendEmptyMessage(MSG_RECG_END); } @Override public void onPlayStart() { LogHelper.d(TAG, "start play"); } @Override public void onPlayEnd() { LogHelper.d(TAG, "stop play"); } }