2011-09-23 26 views
10

Tôi cần phát hiện khi người dùng nhấn các phím âm lượng phần cứng, (Cách tiếp cận an toàn của App Store) Tôi đã thử một số thứ không có may mắn. Bạn có biết cách triển khai chức năng như vậy không? Hiện tại tôi đang đăng ký các thông báo, tuy nhiên họ dường như không được gọi. Dưới đây là mã của tôi:Phát hiện các phím âm lượng của iPhone.

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter addObserver:self 
         selector:@selector(volumeChanged:) 
          name:@"AVSystemController_SystemVolumeDidChangeNotification" 
         object:nil]; 

Và phương pháp nhận là:

-(void)volumeChanged:(NSNotification *)notification{ 
     NSLog(@"YAY, VOLUME WAS CHANGED");} 

Bất cứ lời khuyên sẽ được đánh giá rất nhiều.

+0

xem tại đây: http://stackoverflow.com/questions/772832/program-access-to-iphone- nút âm lượng – mja

Trả lời

4

Bạn cần bắt đầu một phiên âm thanh trước khi thông báo sẽ sa thải:

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(true); 

Bây giờ bạn có thể đăng ký thông báo:

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(volumeChanged:) 
    name:@"AVSystemController_SystemVolumeDidChangeNotification" 
    object:nil]; 

Để có được khối lượng:

float volume = [[[notification userInfo] 
    objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
    floatValue]; 

Bạn sẽ cần phải lưu trữ khối lượng và so sánh nó với giá trị trước đó bạn nhận được từ một notifica để biết nút nào đã được nhấn.

Giải pháp này sẽ vẫn điều chỉnh âm lượng hệ thống khi người dùng nhấn phím âm lượng và hiển thị lớp phủ âm lượng. Nếu bạn muốn tránh thay đổi âm lượng hệ thống và hiển thị lớp phủ (trong bản chất hoàn toàn sử dụng lại các phím âm lượng), see this answer

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