2014-07-21 16 views
6

Có rất nhiều câu hỏi và câu trả lời trên SO có nghĩa là [AVAudioSession sharedInstance].outputVolume là cách duy nhất để phát hiện âm lượng của thiết bị. Nhưng nó dường như không hoạt động tốt. outputVolume không bao giờ thay đổi, mặc dù nó là chính xác khi nó được thiết lập lần đầu tiên (lúc khởi chạy ứng dụng).OutputVolume của AVAudioSession không bao giờ thay đổi

Tôi có làm sai không? Tôi không biết làm gì khác ngoài việc đọc giá trị của outputVolume. Bản năng của tôi sẽ cho tôi biết đây là một lỗi, nếu nó không phải là thực tế là other people dường như đang làm điều đó tốt. Tôi cũng đã thử nghiệm nó trên iOS 7 và 8, vì vậy nó không phải là một lỗi iOS 8. Tôi đã sao chép cùng một thứ trong một dự án thử nghiệm nhỏ, vì vậy không có gì trong dự án của tôi can thiệp vào nó.

Ngoài ra: Tôi cũng nhận thức được sự khác biệt giữa âm lượng chuông và âm lượng. Tôi đã thay đổi cả hai và khối lượng báo cáo vẫn không thay đổi.

Dưới đây là các chức năng tôi đã sử dụng trong dự án thử nghiệm của tôi:

- (void)checkVolume 
{ 
    float volume = [AVAudioSession sharedInstance].outputVolume; 

    NSLog(@"Volume: %f", volume); 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(),^
    { 
     [self checkVolume]; 
    }); 
} 

Trả lời

18

Sử dụng KVO, và chắc chắn rằng để kích hoạt sharedInstance:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 
[[AVAudioSession sharedInstance] addObserver:self forKeyPath:@"outputVolume" options:NSKeyValueObservingOptionNew context:nil]; 
+2

tôi nhìn thấy. Bí mật nằm trong dòng '[[AVAudioSession sharedInstance] setActive: YES error: nil];'. Đây là những gì tôi phải gọi trước khi 'outputVolume' sẽ thay đổi. Cảm ơn bạn rất nhiều – Ahauehauehauhe

+1

Tôi đã phải xem rất nhiều câu trả lời SO không có thật trước khi tôi tìm thấy câu trả lời này. Nó sẽ được đánh giá cao hơn nhiều. –

+1

Tôi vẫn gặp sự cố khi KVO trên outputVolume dường như ngừng hoạt động sau khi ứng dụng của tôi bị mất tiêu điểm (vì vậy về cơ bản khi phiên âm thanh của tôi được đặt lại), ngay cả khi tôi đăng ký lại người quan sát. – Ryan

Các vấn đề liên quan