From f45d78748ec24004ccd4ee80a0064b22112af02a Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Fri, 20 Oct 2023 15:11:12 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E9=95=BF=E6=8C=89=E7=A1=AE=E5=AE=9A?= =?UTF-8?q?=E9=94=AE=E5=85=B3=E6=9C=BA=EF=BC=8C=E9=95=BF=E6=8C=89=E5=B7=A6?= =?UTF-8?q?=E5=8F=B3=E9=94=AE=E8=B0=83=E6=95=B4=E9=9F=B3=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watcher/base/BaseActivity.kt | 72 ++++++++++- .../watcher/utils/PlatformUtils.kt | 6 + .../watcher/utils/VolumeUtil.java | 115 ++++++++++++++++++ app/src/main/res/layout/activity_base.xml | 29 +++++ 4 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/utils/VolumeUtil.java diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt index 70b9cb4..bcd7ba2 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt @@ -3,6 +3,7 @@ package com.yinuo.safetywatcher.watcher.base import android.content.Context import android.os.Bundle import android.util.AttributeSet +import android.view.KeyEvent import android.view.LayoutInflater import android.view.LayoutInflater.Factory2 import android.view.View @@ -14,12 +15,15 @@ import android.widget.SeekBar import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatRadioButton +import com.common.commonlib.utils.LogUtils import com.loper7.date_time_picker.number_picker.NumberPicker import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityBaseBinding import com.yinuo.safetywatcher.watcher.constant.NAMESPACE_ANDROID import com.yinuo.safetywatcher.watcher.ui.view.CommonDialog import com.yinuo.safetywatcher.watcher.ui.view.CommonTopBar +import com.yinuo.safetywatcher.watcher.utils.PlatformUtils +import com.yinuo.safetywatcher.watcher.utils.VolumeUtil import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg abstract class BaseActivity : AppCompatActivity() { @@ -28,17 +32,28 @@ abstract class BaseActivity : AppCompatActivity() { ActivityBaseBinding.inflate(layoutInflater) } + private val volumeUtil by lazy { + VolumeUtil(this@BaseActivity) + } + var loadingDialog: CommonDialog? = null; override fun onCreate(savedInstanceState: Bundle?) { setViewFactory() super.onCreate(savedInstanceState) setContentView(baseBinding.root) + initSound() setChildContent() initView() setTopBar() } + private fun initSound() { + baseBinding.sbSound.max = volumeUtil.mediaMaxVolume + val mediaVolume = volumeUtil.mediaVolume + baseBinding.sbSound.progress = mediaVolume + } + private fun setChildContent() { val contentView = generateContentView() baseBinding.container.addView( @@ -73,7 +88,9 @@ abstract class BaseActivity : AppCompatActivity() { loadingDialog?.dismiss() loadingDialog = CommonDialog(resId) loadingDialog!!.isCancelable = cancelable - loadingDialog!!.show(supportFragmentManager, "loading") + if (!this.isFinishing) { + loadingDialog!!.show(supportFragmentManager, "loading") + } } fun isLoadingShowing(): Boolean { @@ -145,4 +162,57 @@ abstract class BaseActivity : AppCompatActivity() { super.onDestroy() closeLoadingDialog() } + + var isHomeLongPress = false + var isLeftRightLongPress = false + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + LogUtils.w("cyy dispatchKeyEvent keyCode = ${event?.keyCode} count = ${event?.repeatCount} acton = ${event?.action}") + val action = event.action + if (KeyEvent.ACTION_DOWN == action) { + return dealActionDown(event) + } else if (KeyEvent.ACTION_UP == action) { + return dealActionUp(event) + } + return super.dispatchKeyEvent(event) + } + + private fun dealActionUp(event: KeyEvent): Boolean { + val repeatCount = event.repeatCount + val keyCode = event.keyCode + if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode || KeyEvent.KEYCODE_DPAD_RIGHT == keyCode) { + if (isLeftRightLongPress) { + baseBinding.areaSound.visibility = View.GONE + volumeUtil.mediaVolume = baseBinding.sbSound.progress + return true + } + } else if (keyCode == KeyEvent.KEYCODE_ENTER) { + if (isHomeLongPress) { + PlatformUtils.shutDown() + return true + } + } + return super.dispatchKeyEvent(event) + } + + private fun dealActionDown(event: KeyEvent): Boolean { + val repeatCount = event.repeatCount + val keyCode = event.keyCode + if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { + isLeftRightLongPress = repeatCount != 0 + if (repeatCount != 0) { + val visibility = baseBinding.areaSound.visibility + if (View.GONE == visibility) { + baseBinding.areaSound.visibility = View.VISIBLE + baseBinding.sbSound.requestFocus() + } + var mediaVolume = baseBinding.sbSound.progress + if (KeyEvent.KEYCODE_DPAD_LEFT == keyCode) mediaVolume-- else mediaVolume++ + baseBinding.sbSound.progress = mediaVolume++ + return true + } + } else if (keyCode == KeyEvent.KEYCODE_ENTER) { + isHomeLongPress = repeatCount != 0 + } + return super.dispatchKeyEvent(event) + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt index 28aa923..1301a9a 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/PlatformUtils.kt @@ -59,4 +59,10 @@ object PlatformUtils { intent.putExtra("save", true) //true,断电保存;false,断电不保存 CommonApplication.getContext()?.sendBroadcast(intent) } + + fun shutDown() { + val intent = Intent("android.ido.intent.action.set.shutdown") + intent.putExtra("confirm", true) + CommonApplication.getContext()?.sendBroadcast(intent) + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/VolumeUtil.java b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/VolumeUtil.java new file mode 100644 index 0000000..e704d0b --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/VolumeUtil.java @@ -0,0 +1,115 @@ +package com.yinuo.safetywatcher.watcher.utils; + +import android.app.Service; +import android.content.Context; +import android.media.AudioManager; +import android.util.Log; + +import com.yinuo.library.vlc.utils.LogUtils; + +/** + * 音量工具类 + */ +public class VolumeUtil { + private AudioManager mAudioManager; + + public VolumeUtil(){} + + //获取系统的Audio管理者 + public VolumeUtil(Context context){ + mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE); + } + //获取最大多媒体音量 + public int getMediaMaxVolume(){ + Log.e("ccm=======>", "getMediaMaxVolume: " + mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC)); + return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC ); + } + //获取当前多媒体音量 + public int getMediaVolume(){ + Log.e("ccm=======>", "getMediaVolume: " +mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC )); + return mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC ); + } + + //获取最大通话音量 + public int getCallMaxVolume(){ + return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL ); + } + + //获取当前通话音量 + public int getCallVolume(){ + return mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL ); + } + + //获取最大系统音量 + public int getSystemMaxVolume(){ + + return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM ); + } + + //获取当前系统音量 + public int getSystemVolume(){ + + return mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM ); + } + + //获取最大提示音量 + public int getAlermMaxVolume(){ + return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM ); + } + + //获取当前提示音量 + public int getAlermVolume(){ + return mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM ); + } + + // 设置多媒体音量 + public void setMediaVolume(int volume){ + LogUtils.w("setMediaVolume volume =" + volume); + mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, //音量类型 + volume, + AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + } + + public void setMediaVolumeDown(){ + mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, + AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI); + } + + public void setMediaVolumeUp(){ + mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, + AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI); + } + + //设置通话音量 + public void setCallVolume(int volume){ + mAudioManager.setStreamVolume( AudioManager.STREAM_VOICE_CALL, + volume, + AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + } + + //设置提示音量 + public void setAlermVolume(int volume){ + mAudioManager.setStreamVolume( AudioManager.STREAM_ALARM, + volume,AudioManager.FLAG_PLAY_SOUND + |AudioManager.FLAG_SHOW_UI); + } + + // 关闭/打开扬声器播放 + public void setSpeakerStatus(boolean on) { + if (on) { //扬声器 + mAudioManager.setSpeakerphoneOn(true); + mAudioManager.setMode(AudioManager.MODE_NORMAL); + } else { + // 设置最大音量 + int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL); + mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, max, AudioManager.STREAM_VOICE_CALL); + // 设置成听筒模式 + mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); + mAudioManager.setSpeakerphoneOn(false);// 关闭扬声器 + mAudioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL); + } + } + +} diff --git a/app/src/main/res/layout/activity_base.xml b/app/src/main/res/layout/activity_base.xml index 51d389b..4718487 100644 --- a/app/src/main/res/layout/activity_base.xml +++ b/app/src/main/res/layout/activity_base.xml @@ -11,4 +11,33 @@ android:layout_width="match_parent" android:layout_height="@dimen/_87dp"/> + + + + + + \ No newline at end of file