Cách triển khai bằng Kotlin

Cách triển khai bằng Kotlin

gamebet.com url

Chuyển đổi âm thanh sang loa ngoài khi cắm tai nghe có dây trên Android

Ngày cập nhật: 30/10/2024 | Lượt xem: 953 | Số từ: 387 | Phân loại: Android

Trên nền tảng Android, theo mặc định, hệ thống sẽ tự động chuyển âm thanh sang tai nghe khi bạn cắm chúng vào thiết bị, tương tự như cách Windows hoạt động. Tuy nhiên, trong một số trường hợp đặc biệt, người dùng hoặc lập trình viên có thể muốn chuyển lại âm thanh sang loa ngoài (speaker) ngay cả khi tai nghe vẫn đang được kết nối. Việc này có thể thực hiện được nhờ vào các giao diện hệ thống, và điều đó hoàn toàn khả thi trên Android.

Đầu tiên, cần khai báo quyền cần thiết trong file AndroidManifest.xml:

1
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Sau đó, trong Activity chính, bạn có thể sử dụng đoạn mã sau để thao tác với bộ quản lý âm thanh (AudioManager) và chuyển âm thanh sang loa ngoài:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

    // Đặt chế độ âm thanh thành chế độ giao tiếp
    audioManager.mode = AudioManager.MODE_IN_COMMUNICATION

    println("Tai nghe đã được cắm: ${audioManager.isWiredHeadsetOn}")

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        audioManager.availableCommunicationDevices.firstOrNull { it.type == AudioDeviceInfo.TYPE_BUILTIN_SPEAKER }
            ?.let {
                audioManager.setCommunicationDevice(it)
            }
    } else {
        audioManager.isSpeakerphoneOn = true
    }
}

Lưu ý về phương thức isSpeakerphoneOn

Phương thức isSpeakerphoneOn đã bị đánh dấu là deprecated kể từ phiên bản Android mới hơn. Do đó, việc sử dụng setCommunicationDevice() là cách phù hợp hơn để đảm bảo tính tương thích và hiệu quả cho các thiết bị đời mới.

Sự khác biệt giữa MODE_IN_COMMUNICATION và MODE_NORMAL

  • MODE_NORMAL: Chế độ mặc định, không phải là chế độ chuông hay gọi điện.
  • MODE_RINGTONE: Dùng cho âm chuông.
  • MODE_IN_CALL: Chế độ dành cho cuộc gọi thoại.
  • MODE_IN_COMMUNICATION: Chế độ giao tiếp, bao gồm cả âm thanh và video trong các ứng dụng như VoIP. Chế độ này được thêm vào từ Android 3.0 và hoạt động gần giống với chế độ gọi điện.

Vấn đề gặp phải

Khi thử nghiệm trên một số thiết bị như máy tính bảng Huawei, sau khi chuyển sang loa ngoài, khoảng 5 giây sau âm thanh lại bị tắt hoặc quay trở lại đầu ra qua tai nghe. Điều này chưa được kiểm chứng rõ ràng, nhưng có thể liên quan đến cách hệ điều hành của nhà sản xuất xử lý yêu cầu này. Đây là một vấn đề còn tồn đọng và cần được nghiên cứu thêm.

Tài liệu


Nếu bạn đang phát triển ứng dụng cần điều khiển âm thanh linh hoạt, hãy cân nhắc các phương pháp trên để đạt được trải nghiệm mượt mà nhất cho người dùng.

comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy