From be694155e1413352b091e9a47281e79714cdf99e Mon Sep 17 00:00:00 2001 From: wangdongsheng Date: Thu, 16 Sep 2021 18:29:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=AD=E9=9F=B3=E6=92=AD?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 6 +- .../outdoor/activity/LoginActivity.java | 5 +- .../outdoor/activity/PhotographActivity.java | 5 + .../outdoor/activity/PicturesActivity.java | 2 + .../outdoor/activity/UserActivity.java | 7 +- .../navinfo/outdoor/api/UserApplication.java | 2 +- .../fragment/CapacityMeasurementFragment.java | 3 +- .../outdoor/fragment/RegisterFragment.java | 2 +- .../outdoor/fragment/TreasureFragment.java | 3 - .../com/navinfo/outdoor/util/SpeakMode.java | 141 ++++++++++++++++++ .../com/navinfo/outdoor/util/SystemTTS.java | 49 +++--- .../java/com/navinfo/outdoor/util/TTS.java | 2 +- app/src/main/res/layout/activity_login.xml | 1 + app/src/main/res/layout/fragment_register.xml | 2 +- 14 files changed, 187 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/com/navinfo/outdoor/util/SpeakMode.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6df76b..86fe330 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,7 +34,11 @@ - + + + + + () { @Override diff --git a/app/src/main/java/com/navinfo/outdoor/util/SpeakMode.java b/app/src/main/java/com/navinfo/outdoor/util/SpeakMode.java new file mode 100644 index 0000000..2f92c01 --- /dev/null +++ b/app/src/main/java/com/navinfo/outdoor/util/SpeakMode.java @@ -0,0 +1,141 @@ +package com.navinfo.outdoor.util; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.speech.tts.TextToSpeech; +import android.util.Log; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.kongzue.dialog.util.DialogSettings; +import com.kongzue.dialog.v3.MessageDialog; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +//语音类 +public class SpeakMode extends Activity implements TextToSpeech.OnInitListener{ + private Activity mActivity; + private TextToSpeech mTextToSpeech;//TTS对象 + private int status; + private int MY_DATA_CHECK_CODE = 0; + + private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 0x11: + try { + HashMap params = new HashMap(); + + params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, "STREAM_NOTIFICATION");//设置播放类型(音频流类型) + + mTextToSpeech.speak(msg.obj + "", TextToSpeech.QUEUE_ADD, params);//将这个发音任务添加当前任务之后 + + //BaseToast.makeText(mActivity,msg.obj+"",Toast.LENGTH_LONG).show(); + + mTextToSpeech.playSilence(100, TextToSpeech.QUEUE_ADD, params);//间隔多长时间 + + } catch (Exception e) { + + } + break; + } + } + }; + + public SpeakMode(Activity activity) { + + mActivity = activity; + + if (mActivity != null && !mActivity.isFinishing()) + this.mTextToSpeech = new TextToSpeech(this.mActivity, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent checkIntent = new Intent(); + checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); + startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); + } + + public void setData(String json) { + + } + + @Override + public void onInit(int status) { + this.status = status; + if (this.mTextToSpeech != null) { + int result = this.mTextToSpeech.setLanguage(Locale.CHINESE); + if (result == TextToSpeech.LANG_MISSING_DATA + || result == TextToSpeech.LANG_NOT_SUPPORTED) { + if (mActivity != null && !mActivity.isFinishing()) { + DialogSettings.style = DialogSettings.STYLE.STYLE_KONGZUE; + MessageDialog.show((AppCompatActivity) mActivity, "提示", "设备不支持语音播报。", "确定"); + } + } + } + Log.i("TextToSpeechDemo", String.valueOf(status)); + } + + //读语音处理 + public void speakText(final String message) { + new Thread(new Runnable() { + @Override + public void run() { + + if (mTextToSpeech != null) { + Set availableLanguages = mTextToSpeech.getAvailableLanguages(); + List engines = mTextToSpeech.getEngines(); + + int result = mTextToSpeech.setLanguage(Locale.CHINESE); + + if (result == TextToSpeech.LANG_MISSING_DATA + || result == TextToSpeech.LANG_NOT_SUPPORTED) { + + } else { + if (mTextToSpeech != null && mTextToSpeech.isSpeaking()) { + while (mTextToSpeech.isSpeaking()) { + try { + Thread.sleep(100); + } catch (Exception e) { + + } + } + } + + Message msg = new Message(); + msg.what = 0x11; + msg.obj = message; + mHandler.sendMessage(msg); + + } + } + } + }).start(); + + } + + public void stopSpeek() { + try { + + if (this.mTextToSpeech != null && this.mTextToSpeech.isSpeaking()) { + this.mTextToSpeech.stop(); + } + } catch (Exception e) { + + } + } + +} diff --git a/app/src/main/java/com/navinfo/outdoor/util/SystemTTS.java b/app/src/main/java/com/navinfo/outdoor/util/SystemTTS.java index 1d7c551..57e6435 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/SystemTTS.java +++ b/app/src/main/java/com/navinfo/outdoor/util/SystemTTS.java @@ -1,12 +1,16 @@ package com.navinfo.outdoor.util; +import android.annotation.SuppressLint; import android.content.Context; import android.speech.tts.TextToSpeech; import android.speech.tts.UtteranceProgressListener; import android.widget.Toast; +import java.util.List; import java.util.Locale; +import java.util.Set; +@SuppressLint("NewApi") public class SystemTTS extends UtteranceProgressListener implements TTS, TextToSpeech.OnUtteranceCompletedListener { private Context mContext; private static SystemTTS singleton; @@ -29,29 +33,29 @@ public class SystemTTS extends UtteranceProgressListener implements TTS, TextToS textToSpeech = new TextToSpeech(mContext, new TextToSpeech.OnInitListener() { @Override public void onInit(int i) { - //系统语音初始化成功 - if (i == TextToSpeech.SUCCESS) { - int result = textToSpeech.setLanguage(Locale.CHINA); - textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规 - textToSpeech.setSpeechRate(1.0f); - textToSpeech.setOnUtteranceProgressListener(SystemTTS.this); - textToSpeech.setOnUtteranceCompletedListener(SystemTTS.this); - if (result == TextToSpeech.LANG_MISSING_DATA - || result == TextToSpeech.LANG_NOT_SUPPORTED) { - //系统不支持中文播报 - isSuccess = false; - } - } - } + } }); + //系统语音初始化成功 + int result = textToSpeech.setLanguage(Locale.getDefault()); + textToSpeech.setPitch(1.0f);// 设置音调,值越大声音越尖(女生),值越小则变成男声,1.0是常规 + textToSpeech.setSpeechRate(1.0f); + textToSpeech.setOnUtteranceProgressListener(SystemTTS.this); + textToSpeech.setOnUtteranceCompletedListener(SystemTTS.this); + if (result == TextToSpeech.LANG_MISSING_DATA + || result == TextToSpeech.LANG_NOT_SUPPORTED) { + //系统不支持中文播报 + isSuccess = false; + } } public void playText(String playText) { - if (!isSuccess) { - Toast.makeText(mContext, "系统不支持中文播报", Toast.LENGTH_SHORT).show(); - return; - } +// if (!isSuccess) { +// return; +// } + Set availableLanguages = textToSpeech.getAvailableLanguages(); + List engines = textToSpeech.getEngines(); + String defaultEngine = textToSpeech.getDefaultEngine(); if (textToSpeech != null) { textToSpeech.speak(playText, TextToSpeech.QUEUE_ADD, null, null); @@ -64,18 +68,10 @@ public class SystemTTS extends UtteranceProgressListener implements TTS, TextToS } } -// public boolean isSpeaking() { -// if (textToSpeech.isSpeaking()) { -// return true; -// } -// return false; -// } - //播报完成回调 @Override public void onUtteranceCompleted(String utteranceId) { - } @Override @@ -91,5 +87,6 @@ public class SystemTTS extends UtteranceProgressListener implements TTS, TextToS public void onError(String utteranceId) { } + } diff --git a/app/src/main/java/com/navinfo/outdoor/util/TTS.java b/app/src/main/java/com/navinfo/outdoor/util/TTS.java index 46fe9cc..d465543 100644 --- a/app/src/main/java/com/navinfo/outdoor/util/TTS.java +++ b/app/src/main/java/com/navinfo/outdoor/util/TTS.java @@ -2,6 +2,6 @@ package com.navinfo.outdoor.util; public interface TTS { void playText(String playText); - void stopSpeak(); + void stopSpeak(); } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index d46e073..a1f3b11 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -176,4 +176,5 @@ android:layout_marginBottom="20dp" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_register.xml b/app/src/main/res/layout/fragment_register.xml index 1085193..3e48bfc 100644 --- a/app/src/main/res/layout/fragment_register.xml +++ b/app/src/main/res/layout/fragment_register.xml @@ -255,7 +255,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" - android:text="免责声明" + android:text="用户协议" android:textColor="@color/colorWhite" app:layout_constraintBottom_toBottomOf="@id/iv_register_check" app:layout_constraintLeft_toRightOf="@id/iv_register_check"