2010-07-19 34 views
39

Tôi đang viết ứng dụng lời nhắc cho iPhone hiển thị lời nhắc bằng thông báo cục bộ.Phát âm thanh mặc định thông báo cục bộ khi hiển thị UIAlertView?

Nếu lời nhắc tắt trong khi ứng dụng đang chạy, thông báo cục bộ không được hiển thị. Thay vào đó, phương thức didReceiveLocalNotification được gọi trong ủy quyền ứng dụng của tôi và tôi bắt chước hộp thoại thông báo cục bộ bằng cách hiển thị UIAlertView với văn bản lời nhắc.

Khi thông báo cục bộ được hiển thị bên ngoài ứng dụng, thiết bị rung và âm thanh được chỉ định bởi UILocalNotificationDefaultSoundName được phát. Một lần nữa, tôi muốn bắt chước điều này trong ứng dụng khi hiển thị UIAlertView.

Tôi có thể rung thiết bị bằng cách gọi AudioServicesPlaySystemSound(kSystemSoundID_Vibrate), nhưng tôi không thể tìm ra cách phát âm thanh mặc định thông báo cục bộ. Không có hằng số SystemSoundID tương đương, và tôi không chắc chắn đường dẫn sẽ là gì.

tl; dr Tôi muốn phát âm thanh mặc định thông báo cục bộ khi hiển thị UIAlertView. Bất kỳ ý tưởng?

Trả lời

66

Câu hỏi hay. Lý tưởng nhất, sẽ có một cách để lựa chọn một hệ thống âm thanh bằng cách sử dụng AudioServices. Tuy nhiên, báo cáo kết quả sau từ "System Services Sound tham khảo" của Apple cho thấy điều ngược lại:

Trong Mac OS X, khi người dùng đã cấu hình System Preferences để flash màn hình cho các cảnh báo, hoặc nếu âm thanh có thể không được trả lại , gọi chức năng này sẽ dẫn đến màn hình nhấp nháy. Trong Mac OS X, hãy chuyển số hằng số kSystemSoundID_UserPreferredAlert đến phát âm thanh cảnh báo do người dùng chọn trong Tùy chọn hệ thống. Trong iOS không có cảnh báo người dùng ưa thích .

Vì dường như SDK không có gì để cung cấp, bạn có thể muốn bắt chước âm thanh của hệ thống bằng cách sử dụng tệp wav của riêng bạn. Có một thư viện tuyệt vời ở liên kết sau, có lẽ nó sẽ có âm thanh bạn đang tìm kiếm: http://sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.zip

Chúc may mắn!

+0

Tìm tốt. Đó dường như là một lựa chọn hợp lý và đó có lẽ là cách tôi sẽ đi. Cảm ơn! – nickpatrick

+0

tuyệt vời! rất vui được giúp đỡ. –

+3

+1 phiếu bầu cho liên kết đến tệp zip âm thanh – leviathan

3

Set đại biểu trong file .h:

@interface ViewController : UIViewController <UIAlertViewDelegate> 
{ 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; 

@end 

Và thiết lập phương thức khai báo bên trên.

Và trong file .m làm điều này:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ma.mp3", [[NSBundle mainBundle] resourcePath]]]; 

    NSError *error; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 

    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = -1; 


    [audioPlayer play]; 

    [alert show]; 
} 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (buttonIndex==0) { 
     [audioPlayer stop]; 

    } 
    NSLog(@"U HAVE CLICKED BUTTON"); 
} 
+1

Bạn cảm thấy thế nào là tốt hơn câu trả lời được chấp nhận? – itsbruce

+3

vì nó cho thấy mã thực tế về cách phát âm thanh wav từ câu trả lời được chấp nhận bằng AVPlayer? ... nó cũng có thể được phát bằng cách sử dụng thư viện âm thanh và nhận id cho âm thanh –

+0

. Ngoài ra, mọi người không quên [audioPlayer stop]; trong mã cảnh báo, nếu không nó sẽ phát một đoạn rất ngắn của âm thanh của bạn. Cảm ơn người dùng dường như đã biến mất. –

2

Đây là Ngoài Andrew Little câu trả lời.

Để bắt chước âm thanh thông báo tốt hơn, bạn cũng nên để cấu hình phiên âm thanh:

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil]; 

này là điều cần thiết khi ví dụ bạn nghe nhạc và nhận thông báo trong thời gian này.

Các thông số của phiên trên trông giống như cho âm thanh chơi khi cháy thông báo với ứng dụng trong nền:

  • nhạc đang im lặng trước và tiếp tục sau khi âm thanh thông báo.
  • thiết bị chuyển đổi sự im lặng được xử lý một cách chính xác - âm thanh được chơi chỉ khi chuyển đổi là trên
  • khối lượng là như nhau (lưu ý bạn có thể có được khối lượng khác nhau nếu bạn sử dụng âm thanh hệ thống khi ứng dụng ở chế độ nền và các tập tin từ Andrew Little câu trả lời)
18

bạn có thể chơi âm thanh thông báo mặc định theo cách này:

AudioServicesPlaySystemSound(1315); 

trong this link bạn sẽ thấy danh sách các id bạn có thể sử dụng như là tham số của AudioServicesPlaySystemSound (id).

Mã hóa tốt!

+4

nhập AudioToolbox để sử dụng – Radek

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