2011-09-25 42 views
11

可能重複:
Detect Silent mode in iOS5?檢查iPad是在無聲模式

我用下面的代碼,以檢查是否靜音模式時,它按預期工作在iPhone上,但無論在iPad上它都會返回揚聲器。

CFStringRef state; 
UInt32 propertySize = sizeof(CFStringRef); 
AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); 

if (CFStringGetLength(state) == 0) { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Silent mode" 
                message:@"Please turn sound on" 
                delegate:self cancelButtonTitle:@"Ok" 
              otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
} 

任何想法如何修改它以通用?

感謝

丹。

回答

0

在您的XIB中,您可以添加一個滑塊來檢查音量級別,因此基本上可以判斷它是否處於靜音狀態,並知道音量級別。欲瞭解更多關於此課程的信息,請點擊此鏈接http://blog.stormyprods.com/2008/09/proper-usage-of-mpvolumeview-class.html,但請先試試:

以下代碼將創建類似音量欄的內容。

- (void)viewDidLoad { 
     // create a frame for MPVolumeView image 
CGRect frame = volumeViewHolder.bounds; // CGRectMake(0, 5, 180, 0); 
volumeView = [[[MPVolumeView alloc] initWithFrame:frame] autorelease]; 
[volumeView sizeToFit]; 
[volumeViewHolder addSubview:volumeView]; 

for (UIView *view in [volumeView subviews]){ 
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) { 
    volumeViewSlider = view; 
    } 
} 
[[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(volumeChanged:) 
     name:@"AVSystemController_SystemVolumeDidChangeNotification" 
     object:nil]; 
} 
- (void) volumeChanged:(NSNotification *)notify 
{ 
[volumeViewSlider setValue:[[[notify userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue]]; 
} 

我聽說,由於某種原因,蘋果不允許你賣一個應用程序,如果你使用某個類(一個在我的例子),但我不太確定這一點,我會雙精度檢查並確保你被允許使用它。但代碼應該工作。

0

這SO回答的答案好聽:

Detect Silent mode in iOS5?

和關於Gabe的回答,如果他的回答確實使用私有API,蘋果將拒絕您的應用程序。