Đối với mọi người sử dụng số điện thoại voice recognition API của Android, trước đây bạn có thể sử dụng một số tiện ích RecognitionListener mà bạn có thể đăng ký để đẩy các sự kiện khác nhau vào cuộc gọi lại của mình. Đặc biệt, đã có những onBufferReceived(byte[])
phương pháp sau đây:Tại sao RecognitionListener ngừng hoạt động trong Jellybean?
public abstract void onBufferReceived (byte[] buffer)
Từ: API Cấp 8 More âm thanh đã được nhận. Mục đích của chức năng này là cho phép đưa ra phản hồi cho người dùng về âm thanh được chụp . Không có đảm bảo rằng phương pháp này sẽ được gọi.
Tham số
buffer
bộ đệm chứa chuỗi thứ tự lớn 16 bit số nguyên đại diện cho luồng âm thanh kênh đơn. Tỷ lệ mẫu phụ thuộc vào việc triển khai.
Mặc dù phương pháp này một cách rõ ràng khẳng định rằng không có đảm bảo nó sẽ được gọi, trong ICS và trước khi nó sẽ có hiệu quả được gọi là 100% thời gian: Thường xuyên đủ, ít nhất, điều đó bằng cách kết hợp tất cả các byte nhận được theo cách này, bạn có thể tái tạo lại toàn bộ luồng âm thanh và phát lại.
Vì một số lý do, tuy nhiên, trong SDK Jellybean, điều này đã ngừng hoạt động một cách kỳ diệu. Không có thông báo về việc không dùng nữa và mã vẫn được biên dịch, nhưng onBufferReceived
hiện là không bao giờ được gọi là. Về mặt kỹ thuật, điều này không phá vỡ API của họ (vì nó nói rằng "không bảo đảm" phương pháp này sẽ được gọi), nhưng rõ ràng đây là một thay đổi phá vỡ cho rất nhiều thứ phụ thuộc vào hành vi này.
Có ai biết tại sao chức năng này bị vô hiệu hóa không và liệu có cách nào để nhân rộng hành vi của nó trên Jellybean không?
Làm rõ: Tôi nhận ra rằng toàn bộ RecognizerIntent
điều là một giao diện với nhiều triển khai (bao gồm cả một số có sẵn trên Play Store), và họ có thể từng chọn những gì để làm với RecognitionListener
. Tôi đặc biệt đề cập đến việc triển khai Google mặc định mà phần lớn các điện thoại Jellybean sử dụng.
Cảm ơn bạn đã phân tích chuyên sâu xác nhận rằng vấn đề này phổ biến trên Jellybean :) Tôi đoán cách duy nhất nó có thể rõ ràng hơn là nếu chúng tôi có một kỹ sư của Google giải thích _why_ điều này đã xảy ra. Cảm ơn! –