ios設備上有交互式電影。當電影開始時(點擊),視頻開頭的人會要求你插上耳機,如果插上耳機,視頻應該會自動直接跳到故事中(直接進入視頻故事)。我該怎麼辦?以及如何編寫代碼?檢測耳機是否插入iOS設備
回答
首先,你必須爲AudioRoute更改註冊: -
AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,
self);
在這裏,您可以描繪出的理由進行更改路線: -
CFDictionaryRef routeChangeDictionary = inPropertyValue;
CFNumberRef routeChangeReasonRef =
CFDictionaryGetValue (routeChangeDictionary,
CFSTR (kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason;
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable)
{
// your statements for headset unplugged
}
if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable)
{
// your statements for headset plugged
}
如果用戶將使用已插入的耳機來啓動(點按),該怎麼辦?這是否意味着默認設置會被設置?我的意思是,我可以寫[routeChangeReason == kAudioSessionRouteChangeReason_HeadsetUnavailable] ...? – user1369476
routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable我已經給插入耳機聲明瞭這個聲明。 –
謝謝,但我的意思是這個算法:如果最初拔掉插頭,然後在5秒後播放A播放B(因爲可能有人沒有耳機),如果耳機按上述問題插入,則直接播放B.如果耳機原先在錄音前插入在視頻上,然後直接播放B.如果在播放過程中拔掉插頭,則轉到外部揚聲器。 – user1369476
這可能是另一種方式:
CFStringRef newRoute;
size = sizeof(CFStringRef);
XThrowIfError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute), "couldn't get new audio route");
if (newRoute)
{
CFShow(newRoute);
if (CFStringCompare(newRoute, CFSTR("HeadsetInOut"), NULL) == kCFCompareEqualTo) // headset plugged in
{
...
}
else if (CFStringCompare(newRoute, CFSTR("SpeakerAndMicrophone"), NULL) == kCFCompareEqualTo){
....
}
}
首先檢查設備是否連接到任何耳機。
+(BOOL)isHeadsetPluggedIn {
AVAudioSessionRouteDescription* route = [[AVAudioSession sharedInstance] currentRoute];
for (AVAudioSessionPortDescription* desc in [route outputs]) {
if ([[desc portType] isEqualToString:AVAudioSessionPortHeadphones])
return YES;
}
return NO;
}
然後基於bool值,編寫自己的條件。像下面的東西..
if (isHeadphonesConnected) {
//Write your own code here
}else{
}
此外,你可以註冊一個通知,如果你想知道當你在屏幕上的耳機是否被刪除。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(audioRoutingListenerCallback:)
name:AVAudioSessionRouteChangeNotification
object:nil];
- (void)audioRoutingListenerCallback:(NSNotification*)notification
{
NSDictionary *interuptionDict = notification.userInfo;
NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
switch (routeChangeReason) {
case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
NSLog(@"Headphone/Line plugged in");
/*Write your own condition.*/
break;
case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
NSLog(@"Headphone/Line was pulled.");
/*Write your own condition.*/
break;
case AVAudioSessionRouteChangeReasonCategoryChange:
// called at start - also when other audio wants to play
break;
}
}
- 1. 檢測耳機是否插入Android設備。
- 2. 檢測耳機是否插入Java耳機插孔
- 3. 檢測耳機是否插入iPhone
- 4. 檢測耳機是否插入iPhone/iPod
- 5. 通過VBScript檢測耳機是否插入或未插入
- 6. Android:檢查是否插入了耳機
- 7. 檢查耳機是否已插入
- 8. 如何檢查耳機是否插入?
- 9. 檢測設備是否在Daydream VR耳機
- 10. 使用Java來檢測設備是否插入到計算機
- 11. 您能否告訴耳機/耳機是否插入WP8
- 12. 檢測耳機是否有麥克風
- 13. 檢查應用程序啓動時是否插入了耳機
- 14. C#檢測是否插入了USB設備
- 15. Android:檢測耳機以及耳機?
- 16. iPhone中的插孔/耳機檢測
- 17. 如何檢測WinRT中未插入的耳機插孔?
- 18. 如何檢測iOS設備上的耳機(揚聲器)的可用性?
- 19. 檢查耳機是否在Android手機
- 20. 檢測按鈕是否按下帶有兩個耳機的頭戴式耳機?
- 21. Python腳本如何檢測耳機/耳機是否連接到PC?
- 22. 使用耳機檢測用戶輸入
- 23. iPhone的耳機插孔可以用作設備的輸入嗎?
- 24. AVAudioEngine在插入耳機或插入耳機時崩潰
- 25. 在C++中檢測新設備插入
- 26. WndProc檢測設備拔下並插入
- 27. 檢測設備插入和拔出
- 28. 檢測正在插入的設備
- 29. 如何檢測是否是iOS設備並重定向?
- 30. 檢測Android設備是否是用java
http://i48.tinypic.com/1g3lgl.jpg 在PIC忽略模糊部分 – user1369476
參見[此](http://stackoverflow.com/questions/3575463/detecting-if-headphones-被插入iPhone)鏈接。它會幫助你 –
如何註冊AudoRoute更改? – user1369476