Android 10(API29) Kotlin开发:MicrophoneInfo实例化报错及灵敏度获取问题
解决MicrophoneInfo实例化错误并获取麦克风灵敏度的方法
你遇到的错误是因为MicrophoneInfo的构造方法是包私有,无法直接通过new关键字实例化。要获取麦克风信息,必须通过系统提供的AudioManager服务来获取麦克风列表,而不是手动创建对象。
正确实现步骤
- 获取
AudioManager系统服务实例 - 调用
AudioManager.getMicrophones()获取设备上所有麦克风的List<MicrophoneInfo> - 从列表中选取目标麦克风(通常取第一个即可,多麦克风设备可按需筛选)
- 调用
getSensitivity()获取该麦克风的dBFS灵敏度值
修改后的完整代码
import android.media.AudioManager import android.media.MicrophoneInfo import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import br.com.kyloren.soundchecker.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private var noiseValue: Float? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) supportActionBar?.hide() // 获取AudioManager服务 val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager // 获取麦克风列表 val microphones = audioManager.microphones // 检查是否有可用麦克风 if (microphones.isNotEmpty()) { val myMicrophone = microphones[0] // 获取灵敏度(dBFS) noiseValue = myMicrophone.sensitivity // 这里可以使用noiseValue做后续处理,比如打印或显示 noiseValue?.let { println("麦克风灵敏度:${it} dBFS") } } } }
注意事项
- 确保你的应用已申请
RECORD_AUDIO权限,在AndroidManifest.xml中添加:<uses-permission android:name="android.permission.RECORD_AUDIO" /> - 在Android 10及以上版本,还需要动态申请该权限,否则无法正常获取麦克风信息。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

