Tôi có 2 ứng dụng VoIP mà tôi đang phát triển cần phải làm việc cùng nhau; một là một ứng dụng softphone (App A) sử dụng các chế độ âm thanh khác nhau như mong đợi, tức là RINGTONE, IN_COMMUNICATION, vv Ứng dụng khác (App B) cần chế độ âm thanh NORMAL. Tôi cố gắng để đảm bảo rằng họ chơi tốt với nhau vì vậy khi softphone App A hoàn thành một cuộc gọi, nó sẽ trả về chế độ âm thanh là NORMAL. Tương tự như vậy, nếu ứng dụng B cần hoạt động ở giữa ứng dụng A có thể đang hoạt động, nó sẽ lưu chế độ âm thanh mà nó tìm thấy và khôi phục lại khi hoàn thành.Android AudioManager.setMode (MODE_NORMAL) không thành công
Ví dụ, đối với một cuộc gọi trong nước, App A có thể thay đổi chế độ âm thanh như vậy:
- MODE_RINGTONE khi cuộc gọi đến
- MODE_IN_COMMUNICATION khi cuộc gọi được kết nối
- MODE_NORMAL sau khi cuộc gọi được kết thúc
Nếu ứng dụng B cần thực hiện điều gì đó trong khi cuộc gọi được kết nối (bước 2 ở trên), nó sẽ
- tiết kiệm MODE_IN_COMMUNICATION
- bộ MODE_NORMAL
- làm những gì nó cần phải làm
- khôi phục MODE_IN_COMMUNICAITON
Cả hai ứng dụng được Android AudioManager sử dụng bối cảnh ứng dụng của họ. Vấn đề tôi gặp phải, và rằng tôi không hiểu, là khi App B đi qua các bước trên, App A thất bại trong nỗ lực trả lại chế độ âm thanh thành NORMAL sau khi cuộc gọi kết thúc.
myAudioManagerReference.setMode(AudioManager.MODE_NORMAL);
if (myAudioManagerReference.getMode() != AudioManager.MODE_NORMAL)
Log.w(CLASSTAG, "failure to set audio mode to MODE_NORMAL);
Có thể ứng dụng B của tôi có một số loại khóa trên chế độ AudioManager không? Hoặc đã thay đổi quyền cho ứng dụng A sao cho nó không thể thay đổi chế độ trở về NORMAL? Tôi đã tìm thấy rằng một khi tôi thoát khỏi ứng dụng B, sau đó ứng dụng A có thể thay đổi thành công chế độ thành NORMAL.