仿微信实现听筒和扬声器切换功能(Android)
object PlayerModeManager {
enum class PlayMode {
Speaker,//外放 Headset,//耳机 Receiver//听筒 }
private lateinit var audioManager: AudioManager // 设置静音 fun setMute(isMute: Boolean) {
audioManager.isMicrophoneMute = isMute }
// 切换扬声器和听筒模式 fun switchPlayMode(playMode: PlayMode) {
when (playMode) {
PlayMode.Speaker -> {
audioManager.isSpeakerphoneOn = true // 打开扬声器 audioManager.isWiredHeadsetOn = false // 关闭耳机 }
PlayMode.Headset -> {
audioManager.isSpeakerphoneOn = false // 关闭扬声器 audioManager.isWiredHeadsetOn = true // 打开耳机 }
PlayMode.Receiver -> {
audioManager.isSpeakerphoneOn = false // 关闭扬声器 audioManager.isWiredHeadsetOn = false // 关闭耳机 }
}
}
// 获取当前声音模式 fun getCurrentPlayMode(): PlayMode {
return when {
audioManager.isWiredHeadsetOn -> PlayMode.Headset audioManager.isSpeakerphoneOn -> PlayMode.Speaker else -> PlayMode.Receiver }
}
}
// 在使用的Activity或Fragment中调用class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化PlayerModeManager PlayerModeManager.init(audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager)
// 初始化按钮点击事件 findViewById
PlayerModeManager.switchPlayMode(PlayerModeManager.PlayMode.Speaker)
}
findViewById
PlayerModeManager.switchPlayMode(PlayerModeManager.PlayMode.Headset)
}
findViewById
PlayerModeManager.switchPlayMode(PlayerModeManager.PlayMode.Receiver)
}
}
override fun onDestroy() {
super.onDestroy()
// 在Activity销毁时释放资源 PlayerModeManager.release()
}
}
// 布局文件中的按钮