You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gitproject/src/MyApplicatio n/java/com/example/myapplication/yuyin.java

451 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class yuyin extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private SpeechRecognizer mIat;// 语音听写对象
private RecognizerDialog mIatDialog;// 语音听写UI
// 用HashMap存储听写结果
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
private SharedPreferences mSharedPreferences;//缓存
private String mEngineType = SpeechConstant.TYPE_CLOUD;// 引擎类型
private String language = "zh_cn";//识别语言
private TextView tvResult;//识别结果
private Button btnStart;//开始识别
private String resultType = "json";//结果内容数据格式
private Button go;
private TextView tvResult1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yuyin);
tvResult = findViewById(R.id.tv_result);
btnStart = findViewById(R.id.btn_start);
go=findViewById(R.id.go);
btnStart.setOnClickListener(this);
tvResult1=findViewById(R.id.tv_result1);
initPermission();//权限请求
// 使用SpeechRecognizer对象可根据回调消息自定义界面
mIat = SpeechRecognizer.createRecognizer(yuyin.this, mInitListener);
// 使用UI听写功能请根据sdk文件目录下的notice.txt,放置布局文件和图片资源
mIatDialog = new RecognizerDialog(yuyin.this, mInitListener);
mSharedPreferences = getSharedPreferences("ASR",
Activity.MODE_PRIVATE);
}
@Override
public void onClick(View v) {
if( null == mIat ){
// 创建单例失败,与 21001 错误为同样原因,参考 http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=9688
showMsg( "创建对象失败,请确认 libmsc.so 放置正确,且有调用 createUtility 进行初始化" );
return;
}
mIatResults.clear();//清除数据
setParam(); // 设置参数
mIatDialog.setListener(mRecognizerDialogListener);//设置监听
mIatDialog.show();// 显示对话框
}
/**
* 初始化监听器。
*/
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "SpeechRecognizer init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showMsg("初始化失败,错误码:" + code + ",请点击网址https://www.xfyun.cn/document/error-code查询解决方案");
}
}
};
/**
* 听写UI监听器
*/
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
public void onResult(RecognizerResult results, boolean isLast) {
printResult(results);//结果数据解析
printButton(results);
}
/**
* 识别回调错误.
*/
public void onError(SpeechError error) {
showMsg(error.getPlainDescription(true));
}
};
/**
* 数据解析
*
* @param results
*/
private void printResult(RecognizerResult results) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.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));
}
tvResult.setText(resultBuffer.toString());//听写结果显示
}
private void printButton(RecognizerResult results) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.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));
}
if(resultBuffer.toString().equals("健康。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=20000067&chInfo=ch_desktop&url=https%3A%2F%2F68687564.h5app.alipay.com%2Fwww%2Findex.html");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("行程。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=2021002170600786");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("核酸检测。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=2021001123608001");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("扫码付款。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=10000007");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("付款码。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=20000056");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("收款码。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri10 = Uri.parse("alipayqr://platformapi/startapp?saId=20000123");
Intent intent10 = new Intent(Intent.ACTION_VIEW, uri10);
startActivity(intent10);
}
});
}
else if(resultBuffer.toString().equals("设置常用联系人。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent addIntent = new Intent(Intent.ACTION_INSERT, Uri.withAppendedPath(Uri.parse("content://com.android.contacts"), "contacts"));
addIntent.setType("vnd.android.cursor.dir/person");
addIntent.setType("vnd.android.cursor.dir/contact");
addIntent.setType("vnd.android.cursor.dir/raw_contact");
boolean number = false;
addIntent.putExtra(ContactsContract.Intents.Insert.NAME, number);
boolean numberForNewConstant = false;
addIntent.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE, numberForNewConstant);
startActivity(addIntent);
}
});
}
else if(resultBuffer.toString().equals("呼叫。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "15607989193"));
startActivity(intent);
}
});
}
else if(resultBuffer.toString().equals("一键通。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1=new Intent(yuyin.this,yijiantong.class);
startActivity(intent1);;
}
});
}
else if(resultBuffer.toString().equals("找寻。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1=new Intent(yuyin.this,zhaoxun.class);
startActivity(intent1);;
}
});
}
else if(resultBuffer.toString().equals("健康。")){
Button button1 = findViewById(R.id.go);
tvResult1.setText(resultBuffer.toString());
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1=new Intent(yuyin.this,jiankang.class);
startActivity(intent1);;
}
});
}
else{
}
}
/**
* 参数设置
*
* @return
*/
public void setParam() {
// 清空参数
mIat.setParameter(SpeechConstant.PARAMS, null);
// 设置听写引擎
mIat.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);
// 设置返回结果格式
mIat.setParameter(SpeechConstant.RESULT_TYPE, resultType);
if (language.equals("zh_cn")) {
String lag = mSharedPreferences.getString("iat_language_preference",
"mandarin");
Log.e(TAG, "language:" + language);// 设置语言
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
// 设置语言区域
mIat.setParameter(SpeechConstant.ACCENT, lag);
} else {
mIat.setParameter(SpeechConstant.LANGUAGE, language);
}
Log.e(TAG, "last language:" + mIat.getParameter(SpeechConstant.LANGUAGE));
//此处用于设置dialog中不显示错误码信息
//mIat.setParameter("view_tips_plain","false");
// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));
// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));
// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));
// 设置音频保存路径保存音频格式支持pcm、wav设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
}
/**
* 提示消息
* @param msg
*/
private void showMsg(String msg) {
Toast.makeText(yuyin.this, msg, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (null != mIat) {
// 退出时释放连接
mIat.cancel();
mIat.destroy();
}
}
/**
* android 6.0 以上需要动态申请权限
*/
private void initPermission() {
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
ArrayList<String> toApplyList = new ArrayList<String>();
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
}
}
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()) {
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
}
/**
* 权限申请回调,可以作进一步处理
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 此处为android 6.0以上动态授权的回调,用户自行实现。
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}