âm thanh xử lý trên Android sẽ là khá khủng khiếp trong một thời gian. Các API khá kỳ lạ, kém tài liệu và tiếp tục thay đổi/không dùng/phá vỡ giữa các phiên bản. Ngay cả mã AudioManager
cũng có FIXME trong đó.
Dù sao, có một số loại luồng trong Android (nhạc, thông báo, cuộc gọi điện thoại, v.v.) và các ứng dụng có nghĩa là chọn một loại thích hợp để phát lại. Tôi tưởng tượng phần lớn ứng dụng Android nên sử dụng loại nhạc/phương tiện (STREAM_TYPE_MUSIC
). Bạn đặt cài đặt này trên số MediaPlayer
bằng phương pháp setAudioStreamType
.
SDK không cho phép bạn thiết lập một dòng đơn loại như độc tấu — gây ra tất cả các dòng khác được tắt — nhưng tôi không tin bạn có thể xác định các âm thanh được phát trở lại bởi các ứng dụng cụ thể và bằng cách nào đó tạm dừng/hủy tạm nó. Ứng dụng nhạc nói chung sẽ sử dụng số PhoneStateListener
để tạm dừng khi có cuộc gọi đến.
Vì vậy, bạn có thể "mượn" luồng cuộc gọi điện thoại MediaPlayer
và sử dụng phương thức gọi AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true)
khi phát lại bắt đầu, sau đó nhấn -solo luồng với false
khi phát lại hoặc Activity
của bạn được thực hiện.
tôi có thể cho bạn biết rằng làm việc này, nhưng tôi không thể nhớ ngay cho dù bạn cũng cần phải thiết lập âm thanh chế độ-MODE_IN_CALL
khi sử dụng dòng cuộc gọi thoại (như thế này: AudioManager.setMode(AudioManager.MODE_IN_CALL)
). Nếu bạn thấy điều đó là bắt buộc, thì bạn cần phải đảm bảo bạn trả lại chế độ thành MODE_NORMAL
khi phát lại hoàn tất, nếu không, bất cứ khi nào bạn nhấn các phím cứng âm lượng, nó sẽ nói "Âm lượng trong cuộc gọi"! Tuy nhiên, nếu và khi bạn muốn đổi lại thành MODE_NORMAL
, bạn phải kiểm tra xem cuộc gọi điện thoại chính hãng có xảy ra không tại thời điểm đó ...
Có thể bạn có thể sử dụng loại luồng khác thay vì loại cuộc gọi thoại, nhưng tôi chỉ nói từ kinh nghiệm làm việc trên một ứng dụng có thể sử dụng loa ngoài hoặc tai nghe để phát lại âm thanh, trong đó yêu cầu việc sử dụng luồng cuộc gọi thoại.
Như tôi đã nói, xử lý âm thanh không phải là đặc biệt thú vị ...;)
Nguồn
2010-01-03 18:24:54
Cảm ơn Christopher, lời khuyên của bạn là chỗ trên. Tôi đã thực sự bị tấn công, STREAM_ALARM, phù hợp với mục đích của tôi, đặt nó thành solo và điều này có hiệu quả mong muốn. Cảm ơn một lần nữa. –
Rất tiếc, không phải một ý tưởng hay, ít nhất là không có tai nghe. Quay lại VOICE_CALL. Dường như không cần MODE_IN_CALL, ít nhất là không xa. –