2012-08-23 65 views
4

我有這樣的AppDelegate中(didFinishLaunching):iOS的 - 沒有收到UIEventTypeRemoteControl事件

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

我試圖處理事件相關視圖控制器,但那是參差不齊(有些視圖控制器將獲得的事件和其他即使他們是第一響應者也不會)。我試過UIApplication的子類。這沒有用。現在,我想繼承一個UIWindow和做到這一點(見註釋):

- (void)sendEvent:(UIEvent *)event { 
if (event.type == UIEventTypeRemoteControl) { 
    NSLog(@"I wish this happened"); //this never happens 
} 
else 
{ 
    NSLog(@"some other event"); //this does happen on any other interaction 
    [super sendEvent:event]; 
} 
} 

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { 

if (receivedEvent.type == UIEventTypeRemoteControl) { 
    NSLog(@"got remote event"); // this never happens either 
    switch (receivedEvent.subtype) { 

     case UIEventSubtypeRemoteControlTogglePlayPause: 
     { 
      NSLog(@"handle play/pause"); 
      break; 
     } 


     default: 
      break; 
    } 
} 
} 

我試圖既沒有這種在信息的plist:

<key>UIBackgroundModes</key> 
<array> 
     <string>audio</string> 
</array> 

不有所作爲。正如Apple文檔所述,您可以使用音頻控件模擬遠程控制事件(雙擊主頁按鈕並滾動到底部)。當我按播放或暫停時,它只播放來自我的iTunes資料庫的音頻。我也嘗試了Apple耳機上的按鈕。沒有。

我想要做的就是檢測遙控器上的播放/暫停按鈕,並處理事件。我還需要做些什麼來抓住這些事件?

回答

8

好吧,我的生活還有幾個小時進入蘋果黑洞。事實證明,只有使用AVAudioPlayer播放某種類型的音頻後,或者播放具有音頻的視頻文件後,才能捕獲遠程控制事件。這是沒有記錄在任何地方here

所以在我的情況下,我必須首先播放一個虛擬的無聲音頻文件,然後才能嘗試捕捉遠程控制事件。希望這可以幫助某個人。

(更新)請注意updated documentation現聲明如下:

接收遠程控制的事件,您的應用程序必須做三兩件事:

  • 是第一個響應者。呈現多媒體內容的視圖或視圖控制器必須是第一響應者。
  • 打開遙控事件的傳送。您的應用必須明確要求開始接收遠程控制事件。
  • 開始播放音頻。您的應用必須是「正在播放」應用。重申,即使您的應用程序是第一響應者,並且您在事件傳送時已變爲 ,但您的應用程序在開始播放音頻之前不會收到遠程控制事件 。
+0

這正是我的問題。非常感謝......將永遠需要弄清楚。 –

+0

在iOS 6+中不起作用。我在鎖定屏幕上看到我的應用正在播放的信息,但仍然沒有按暫停/播放的事件。 – openfrog

+0

而且沒有意義:如果使用AVAudioPlayer,則沒有視圖控制器「呈現它」。它是一個播放音頻並沒有超視圖的類。 – openfrog