不喜勿噴,謝謝,正在進階中
//主要是在訊飛官網上下載咱們需要的內容和包。導入一系列jar包,按照開發者選項中的一系列要求開發。
public class MainActivity extends AppCompatActivity { Button mBtn_record; RecognizerDialog iatDialog; SpeechSynthesizer mTts; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onContentChanged() { super.onContentChanged(); mBtn_record = (Button) findViewById(R.id.btn_record); gettelmessage(); //初始化用戶 SpeechUtility.createUtility(this, SpeechConstant.APPID + "=583074ca"); //可以開始語音聽寫 /**設置參數* * * * */ //1.創建SpeechRecognizer對象,第二個參數:本地聽寫時傳InitListener SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null); //2.設置聽寫參數,詳見《科大訊飛MSC API手冊(Android)》SpeechConstant類 //設置應用領域 mIat.setParameter(SpeechConstant.DOMAIN, "iat"); //中國語言爲簡體中文 mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //設置方言 mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); /** * 開始聽寫 * */ //1.創建SpeechRecognizer對象,第二個參數:本地聽寫時傳InitListener iatDialog = new RecognizerDialog(this, null); //2.設置聽寫參數,同上節 //3.設置回調接口 iatDialog.setListener(listener); //語音 //1.創建SpeechSynthesizer對象, 第二個參數:本地合成時傳InitListener mTts = SpeechSynthesizer.createSynthesizer(this, null); //2.合成參數設置,詳見《科大訊飛MSC API手冊(Android)》SpeechSynthesizer 類 // mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoqian");//設置發音人 東北話 mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaorong");//設置發音人 四川話 // mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//設置發音人 普通話 mTts.setParameter(SpeechConstant.SPEED, "50");//設置語速 mTts.setParameter(SpeechConstant.VOLUME, "80");//設置音量,範圍0~100 mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //設置雲端 //設置合成音頻保存位置(可自定義保存位置),保存在“./sdcard/iflytek.pcm” //保存在SD卡需要在AndroidManifest.xml添加寫SD卡權限 //如果不需要保存合成音頻,註釋該行代碼 mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm"); //4.開始聽寫 mBtn_record.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { list.clear(); builder = new StringBuilder(); iatDialog.show(); } }); } ArrayList<RecognizerResult> list = new ArrayList<>(); StringBuilder builder; RecognizerDialogListener listener = new RecognizerDialogListener() { @Override public void onResult(RecognizerResult recognizerResult, boolean b) { String recognize = recognizerResult.getResultString(); Log.e("iiiiiiii", recognize); //解析,要判斷是不是最後一句話 try { JSONObject jsonObject = new JSONObject(recognize); boolean ls = jsonObject.getBoolean("ls"); if (ls == false) { //添加集合 list.add(recognizerResult); } //爲最後一句話的時候 if (ls == true) { for (int i = 0; i < list.size(); i++) { RecognizerResult result = list.get(i); JSONObject obj = new JSONObject(result.getResultString()); JSONArray ws = obj.getJSONArray("ws"); for (int j = 0; j < ws.length(); j++) { JSONObject wsobject = ws.getJSONObject(j); JSONArray cw = wsobject.getJSONArray("cw"); for (int k = 0; k < cw.length(); k++) { JSONObject cwobject = cw.getJSONObject(k); String w = cwobject.getString("w"); builder.append(w); } } } } } catch (JSONException e) { e.printStackTrace(); } finally { //3.開始合成 String mess = builder.toString(); /** * 關鍵字“給”作爲關鍵字 * */ int indexof = mess.lastIndexOf("給"); String user = mess.substring(indexof+1); for (int i = 0; i < mlist.size(); i++) { info inf = mlist.get(i); if (user.equals(inf.getName())) { Intent inten = new Intent(Intent.ACTION_CALL); inten.setData(Uri.parse("tel:" + inf.getNumber().trim())); if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { return; } MainActivity.this.startActivity(inten); return; } } // mTts.startSpeaking(mess, listene); } mTts.startSpeaking("通訊錄沒有找到這個人",listene); } @Override public void onError(SpeechError speechError) { } }; SynthesizerListener listene = new SynthesizerListener() { @Override public void onSpeakBegin() { } @Override public void onBufferProgress(int i, int i1, int i2, String s) { } @Override public void onSpeakPaused() { } @Override public void onSpeakResumed() { } @Override public void onSpeakProgress(int i, int i1, int i2) { } @Override public void onCompleted(SpeechError speechError) { } @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }; ArrayList<info> mlist=new ArrayList<>(); public void gettelmessage() { ContentResolver contentResolver = this.getContentResolver(); //獲取總表的遊標 Cursor cursorContacts = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while (cursorContacts.moveToNext()) { //總表ID int cursorid = cursorContacts.getInt(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID)); //找中間表,以總表ID爲條件查詢中間表 Cursor cursorraw = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI, null, ContactsContract.RawContacts._ID + " = ?", new String[]{cursorid + ""}, null); //查詢最後的表 while (cursorraw.moveToNext()) { //中間表ID int rawid = cursorraw.getInt(cursorraw.getColumnIndex(ContactsContract.RawContacts._ID)); info info = new info(); //名字 getname(contentResolver, rawid, info); //電話號碼 getnumber(contentResolver, rawid, info); mlist.add(info); Log.e("info---------------", info.toString()); } cursorraw.close(); } cursorContacts.close(); } private void getnumber(ContentResolver contentResolver, int rawid, info info) { //查詢電話 Cursor querydatab = contentResolver.query(ContactsContract.Data. CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " =? ", new String[]{rawid + "", ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE}, null); while (querydatab.moveToNext()) { String number = querydatab.getString(querydatab.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); info.setNumber(number); } querydatab.close(); } private void getname(ContentResolver contentResolver, int rawid, info info) { //查詢內容表 Cursor querydataa = contentResolver.query(ContactsContract.Data. CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " =? ", new String[]{rawid + "", ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}, null); while (querydataa.moveToNext()) { String name = querydataa.getString(querydataa.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); info.setName(name); } querydataa.close(); } }==========================================================================================================================
public class info { String name; String number; public info() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } @Override public String toString() { return "info{" + "name='" + name + '\'' + ", number='" + number + '\'' + '}'; } }=======================================================================================================================
附上demo地址:
鏈接:http://pan.baidu.com/s/1c2w7eSS 密碼:hs2t