安卓開發訊飛通訊(錄音,打電話)

不喜勿噴,謝謝,正在進階中

//主要是在訊飛官網上下載咱們需要的內容和包。導入一系列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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章