package com.atguigu.mobileplayer1020.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.atguigu.mobileplayer1020.R; import com.atguigu.mobileplayer1020.adapter.SearchAdapter; import com.atguigu.mobileplayer1020.bean.SearchBean; import com.atguigu.mobileplayer1020.utils.Constant; import com.atguigu.mobileplayer1020.utils.JsonParser; import com.google.gson.Gson; import com.iflytek.cloud.InitListener; import com.iflytek.cloud.RecognizerResult; import com.iflytek.cloud.SpeechConstant; import com.iflytek.cloud.SpeechError; import com.iflytek.cloud.SpeechUtility; import com.iflytek.cloud.ui.RecognizerDialog; import com.iflytek.cloud.ui.RecognizerDialogListener; import org.json.JSONException; import org.json.JSONObject; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; public class SearchActivity extends AppCompatActivity implements View.OnClickListener { private EditText etSearch; private ImageView ivVoice; private TextView tvSearch; private ListView listview; // 用HashMap存储听写结果 private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>(); /** * Find the Views in the layout<br /> * <br /> * Auto-created on 2017-01-14 11:56:07 by Android Layout Finder * (http://www.buzzingandroid.com/tools/android-layout-finder) */ private void findViews() { setContentView(R.layout.activity_search); SpeechUtility.createUtility(this, SpeechConstant.APPID + "=5838f0d9"); etSearch = (EditText) findViewById(R.id.et_search); ivVoice = (ImageView) findViewById(R.id.iv_voice); tvSearch = (TextView) findViewById(R.id.tv_search); listview = (ListView) findViewById(R.id.listview); ivVoice.setOnClickListener(this); tvSearch.setOnClickListener(this); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findViews(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_voice: // Toast.makeText(this, "语音输入", Toast.LENGTH_SHORT).show(); showDialogVoice(); break; case R.id.tv_search: // Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show(); gotoSearch(); break; } } private void gotoSearch() { String word = etSearch.getText().toString().trim(); try { word = URLEncoder.encode(word,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (!TextUtils.isEmpty(word)) { String url = Constant.NET_SEARCH_URL + word; Log.e("TAG","url=="+word); getDataFromNet(url); } else { //请输入关键字 Toast.makeText(this, "请输入关键字", Toast.LENGTH_SHORT).show(); } } private void getDataFromNet(String url) { RequestParams params = new RequestParams(url); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { processData(result); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private void processData(String result) { SearchBean searchBean = new Gson().fromJson(result,SearchBean.class); List<SearchBean.ItemsBean> items = searchBean.getItems(); if(items != null && items.size() >0){ SearchAdapter searchAdapter = new SearchAdapter(SearchActivity.this,items); listview.setAdapter(searchAdapter); } } private void showDialogVoice() { //1.创建RecognizerDialog对象 RecognizerDialog mDialog = new RecognizerDialog(this, new MyInitListener()); //2.设置accent、 language等参数 mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); mDialog.setParameter(SpeechConstant.ACCENT, "mandarin"); //若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解 //结果 // mDialog.setParameter("asr_sch", "1"); // mDialog.setParameter("nlp_version", "2.0"); //3.设置回调接口 mDialog.setListener(new MyRecognizerDialogListener()); //4.显示dialog,接收语音输入 mDialog.show(); } class MyRecognizerDialogListener implements RecognizerDialogListener { @Override public void onResult(RecognizerResult recognizerResult, boolean b) { String result = recognizerResult.getResultString(); System.out.println(result); String text = JsonParser.parseIatResult(recognizerResult.getResultString()); String sn = null; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(recognizerResult.getResultString()); sn = resultJson.optString("sn"); } catch (JSONException e) { e.printStackTrace(); } mIatResults.put(sn, text); StringBuffer resultBuffer = new StringBuffer(); for (String key : mIatResults.keySet()) { resultBuffer.append(mIatResults.get(key)); } String reulst = resultBuffer.toString(); reulst = reulst.replace("。",""); etSearch.setText(reulst); etSearch.setSelection(etSearch.length()); } @Override public void onError(SpeechError speechError) { Toast.makeText(SearchActivity.this, "出错了哦", Toast.LENGTH_SHORT).show(); } } class MyInitListener implements InitListener { @Override public void onInit(int i) { } } }