浏览代码

兼容大朝华手柄键值监听,解决Android高版本tts服务绑定失败问题

weizhengliang 1 年之前
父节点
当前提交
6e082d54f3

+ 8 - 11
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -1219,11 +1219,11 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
     }
     override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
         Log.d(TAG, "keyDown ====> keyCode: $keyCode, action: ${event?.action}")
-        if (keyCode == 135) {
+        if (keyCode == 135 || keyCode == 139) {
             //手柄拿起
+            Constant.hookOn = false
             EventBus.getDefault().post(MessageEvent(false, Constant.EVENT_TOGGLE_SPEAKER))
             if (System.currentTimeMillis() - hookoffTime > 2000) {
-                Constant.hookOn = false
                 VoiceManagerUtil.switchAudioMode(activity, false)
                 VoiceManagerUtil.setCallVoice(activity, SettingConfig.getHostCallVolume(activity))
 
@@ -1235,10 +1235,11 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
                 }
             }
             hookoffTime = System.currentTimeMillis()
-        } else if (keyCode == 134) {
+        } else if (keyCode == 134 || keyCode == 138) {
             //手柄放下
+            Constant.hookOn = true
+            EventBus.getDefault().post(MessageEvent(true, Constant.EVENT_TOGGLE_SPEAKER))
             if (System.currentTimeMillis() - hookonTime > 2000) {
-                Constant.hookOn = true
                 VoiceManagerUtil.switchAudioMode(activity, true)
                 VoiceManagerUtil.setCallVoice(activity, SettingConfig.getHostCallVolume(activity))
 
@@ -1446,13 +1447,9 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNewN
         }
 
     }
-    override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
-        Log.i(TAG, "keyup keyCode " + keyCode)
-        return if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
-            //不执行父类点击事件
-            true
-        } else super.onKeyUp(keyCode, event)
-        //继续执行父类其他点击事件
+
+    override fun onBackPressed() {
+        //禁用返回
     }
 
     //探视接听

+ 6 - 1
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/SipCallFragment.kt

@@ -360,7 +360,12 @@ class SipCallFragment: BaseCallFragment() {
             }
 
             Constant.EVENT_TOGGLE_SPEAKER -> {
-                toggleSpeaker(false)
+                if (Constant.hookOn) {
+                    //手柄放下
+                    toggleSpeaker(true)
+                } else {
+                    toggleSpeaker(false)
+                }
             }
         }
     }

+ 64 - 27
android_host/src/main/java/com/wdkl/ncs/android/component/nursehome/util/SpeechUtil.java

@@ -1,6 +1,7 @@
 package com.wdkl.ncs.android.component.nursehome.util;
 
 import android.content.Context;
+import android.os.Build;
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.UtteranceProgressListener;
 import android.text.TextUtils;
@@ -45,66 +46,102 @@ public class SpeechUtil {
     public void init(Context context, final TtsCallback callback) {
         final String language = LocaleMangerUtils.getApplicationLocale().getLanguage();
         Log.d(TAG, "app locale language: " + language);
-        if (Locale.CHINESE.getLanguage().equals(language)) {
-            textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
-                @Override
-                public void onInit(int status) {
-                    if (status == TextToSpeech.SUCCESS) {
-                        int supported = textToSpeech.setLanguage(Locale.CHINESE);
-                        if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
-                            Constant.TTS_STATUS=1;
-                            Log.d(TAG, "onInit: 当前不支持中文");
+        //8.0以下版本自动设置tts
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O ) {
+            if (Locale.CHINESE.getLanguage().equals(language)) {
+                textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
+                    @Override
+                    public void onInit(int status) {
+                        if (status == TextToSpeech.SUCCESS) {
+                            int supported = textToSpeech.setLanguage(Locale.CHINESE);
+                            if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
+                                Constant.TTS_STATUS = 1;
+                                Log.d(TAG, "onInit: 当前不支持中文");
+                                if (callback != null) {
+                                    callback.onInit(false);
+                                }
+                            } else {
+                                Constant.TTS_STATUS = 2;
+                                Log.d(TAG, "onInit: 支持中文");
+                                if (callback != null) {
+                                    callback.onInit(true);
+                                }
+                            }
+                            Log.d(TAG, "onInit: TTS引擎初始化成功");
+                        } else {
+                            Constant.TTS_STATUS = 0;
+                            Log.d(TAG, "onInit: TTS引擎初始化失败");
                             if (callback != null) {
                                 callback.onInit(false);
                             }
+                        }
+                    }
+                }, "com.iflytek.speechcloud");
+                textToSpeech.setSpeechRate(0.5f);
+            } else {
+                textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
+                    @Override
+                    public void onInit(int status) {
+                        if (status == TextToSpeech.SUCCESS) {
+                            int supported = textToSpeech.setLanguage(new Locale(language));
+                            if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
+                                Constant.TTS_STATUS = 1;
+                                Log.d(TAG, "onInit: 当前不支持" + language);
+                                if (callback != null) {
+                                    callback.onInit(false);
+                                }
+                            } else {
+                                Constant.TTS_STATUS = 2;
+                                Log.d(TAG, "onInit: 支持" + language);
+                                if (callback != null) {
+                                    callback.onInit(true);
+                                }
+                            }
+                            Log.d(TAG, "onInit: TTS引擎初始化成功");
                         } else {
-                            Constant.TTS_STATUS=2;
-                            Log.d(TAG, "onInit: 支持中文");
+                            Constant.TTS_STATUS = 0;
+                            Log.d(TAG, "onInit: TTS引擎初始化失败");
                             if (callback != null) {
-                                callback.onInit(true);
+                                callback.onInit(false);
                             }
                         }
-                        Log.d(TAG, "onInit: TTS引擎初始化成功");
-                    } else {
-                        Constant.TTS_STATUS=0;
-                        Log.d(TAG, "onInit: TTS引擎初始化失败");
-                        if (callback != null) {
-                            callback.onInit(false);
-                        }
                     }
-                }
-            }, "com.iflytek.speechcloud");
-            textToSpeech.setSpeechRate(0.5f);
+                }, "com.google.android.tts");
+                textToSpeech.setSpeechRate(0.8f);
+            }
         } else {
+            //8.0以上版本需要手动设置tts
             textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
                 @Override
                 public void onInit(int status) {
                     if (status == TextToSpeech.SUCCESS) {
                         int supported = textToSpeech.setLanguage(new Locale(language));
                         if ((supported != TextToSpeech.LANG_AVAILABLE) && (supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
-                            Constant.TTS_STATUS=1;
+                            Constant.TTS_STATUS = 1;
                             Log.d(TAG, "onInit: 当前不支持" + language);
                             if (callback != null) {
                                 callback.onInit(false);
                             }
                         } else {
-                            Constant.TTS_STATUS=2;
+                            Constant.TTS_STATUS = 2;
                             Log.d(TAG, "onInit: 支持" + language);
                             if (callback != null) {
                                 callback.onInit(true);
                             }
+                            if (!Locale.CHINESE.getLanguage().equals(language)) {
+                                textToSpeech.setSpeechRate(0.9f);
+                            }
                         }
                         Log.d(TAG, "onInit: TTS引擎初始化成功");
                     } else {
-                        Constant.TTS_STATUS=0;
+                        Constant.TTS_STATUS = 0;
                         Log.d(TAG, "onInit: TTS引擎初始化失败");
                         if (callback != null) {
                             callback.onInit(false);
                         }
                     }
                 }
-            }, "com.google.android.tts");
-            textToSpeech.setSpeechRate(0.8f);
+            });
         }
 
     }

+ 7 - 3
app/src/main/AndroidManifest.xml

@@ -21,11 +21,15 @@
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
-
-
-
     <uses-permission android:name ="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
+
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.TTS_SERVICE" />
+        </intent>
+    </queries>
+
     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launch_48"

+ 7 - 0
app/src/main/sharedUserId/AndroidManifest.xml

@@ -26,6 +26,13 @@
 
     <uses-permission android:name ="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
+
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.TTS_SERVICE" />
+        </intent>
+    </queries>
+
     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launch_48"