2015-01-28 18 views
20

पर वॉल्यूम अप/डाउन बटन प्रेस को कैप्चर करने का सबसे साफ तरीका आईओएस 8 पर वॉल्यूम अप/डाउन बटन प्रेस कैप्चर करने का सबसे अच्छा/साफ तरीका क्या है?आईओएस 8

आदर्श रूप में मैं कीप्रेस को कैप्चर करना चाहता हूं और सिस्टम वॉल्यूम को बदलने से रोकता हूं (या कम से कम, मात्रा को एचयूडी को दिखने से रोकता है)।


कुछ पुराने चारों ओर जा रहा जवाब जो पदावनत तरीकों का उपयोग और iOS 8 पर सब पर काम करने के लिए यह iOS 8 specific one या तो काम नहीं किया नहीं लग रहे हैं।

यह RBVolumeButtons ओपन सोर्स क्लास आईओएस 8 पर काम नहीं कर रहा है।

+0

के लिए इस है एक जेलब्रोकन या एंटरप्राइज़ ऐप? यदि नहीं, तो ऐप्पल इस पर समीक्षा करने का कोई तरीका नहीं है। –

+0

नहीं, यह एक नियमित ऐप स्टोर के लिए है। मैंने पढ़ा है कि ऐप्पल अब कुछ विशिष्ट परिस्थितियों में वॉल्यूम बटन को कैप्चर करने की मंजूरी देता है (उदाहरण के लिए, कैमरा शटर के रूप में उनका उपयोग करके, देखें [कैमरा +] (http://www.theverge.com/apple/2011/11/17/2569563/ कैमरा एप्लिकेशन के iphone अद्यतन मात्रा बटन-शटर))। –

+1

यहां मेरे डुप्लिकेट प्रश्न का उत्तर देखें: http://stackoverflow.com/a/37360733/893774 मेरा मानना ​​है कि जेपीएसवोल्मबटन हैडलर अभी सबसे साफ तरीका है, खासकर हाल ही में 1.0.1 फिक्स के बाद से। – marco

उत्तर

1

आह ठीक है, अधिक जानकारी के लिए ऑडियो सत्र सेवा संदर्भ देखें। आपको AudioSessionInitialize के साथ एक ऑडियो सत्र शुरू करने की आवश्यकता है और फिर इसे AudioSessionSetActive के साथ सक्रिय करें, AudioSessionAddPropertyListener के साथ वॉल्यूम में परिवर्तनों को सुनें और एक कॉलबैक पास करें जिसमें ऑडियोसेशनप्रॉपर्टी लिस्टनर टाइप करें।

इस वेब साइट एक अच्छा लिखने होते है: http://fredandrandall.com/blog/2011/11/18/taking-control-of-the-volume-buttons-on-ios-like-camera/

+1

क्षमा करें, मैंने देखा है कि यह गिटूब है जिसे आप –

+0

हाँ से लिंक करते हैं, जैसा कि मैं कह रहा था कि दृष्टिकोण आईओएस 8 पर काम नहीं कर रहा है (लेकिन कैमरा + में यह सुविधा आईओएस पर काम कर रही है 8)। –

9

प्रथम जोड़ने AVFoundation और MediaPlayerफ्रेमवर्क और फिर आप/नीचे बटन प्रेस अप पता लगाने के लिए नीचे दिए गए कोड का उपयोग कर सकते,

-(void)viewWillAppear:(BOOL)animated 
{ 
AVAudioSession* audioSession = [AVAudioSession sharedInstance];  
[audioSession setActive:YES error:nil]; 
[audioSession addObserver:self 
       forKeyPath:@"outputVolume" 
        options:0 
        context:nil]; 
} 

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 

    if ([keyPath isEqual:@"outputVolume"]) {   
     float volumeLevel = [[MPMusicPlayerController applicationMusicPlayer] volume]; 
     NSLog(@"volume changed! %f",volumeLevel); 
    } 
} 
+5

अच्छा समाधान, लेकिन ध्यान रखें कि यह 'वॉल्यूम अप' बटन का पता नहीं लगाएगा यदि वॉल्यूम पहले से ही अधिकतम है (या 'डाउन' अगर यह पहले से ही म्यूट – Eliktz

+2

पर सोच रहा है, तो यह एप्पल के नियमों और शर्तों के खिलाफ नहीं होगा जैसा कि यहां बताया गया है http://stackoverflow.com/questions/29923664/is-it-possible-to-disable-volume-buttons-in-ios-apps? – daisura99

+0

यहां तक ​​कि मैं भी यह जानना चाहता हूं और क्या यह संभव है प्रोग्रामेटिक रूप से वॉल्यूम चेंज को उलट देता है? (ताकि वॉल्यूम स्तर मूल स्तर –

8

स्विफ्ट के लिए आप अपने दृश्य में अगला कोड का उपयोग कर सकते हैं नियंत्रक वर्ग:

let volumeView = MPVolumeView(frame: CGRectMake(-CGFloat.max, 0.0, 0.0, 0.0)) 
self.view.addSubview(volumeView) 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(volumeChanged(_:)), name: "AVSystemController_SystemVolumeDidChangeNotification", object: nil) 

फिर, इस समारोह

func volumeChanged(notification: NSNotification) { 

    if let userInfo = notification.userInfo { 
     if let volumeChangeType = userInfo["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String { 
      if volumeChangeType == "ExplicitVolumeChange" { 
       // your code goes here 
      } 
     } 
    } 
} 

इस कोड को उपयोगकर्ता द्वारा स्पष्ट मात्रा परिवर्तन कार्रवाई का पता लगाने को जोड़ने के रूप में यदि आप स्पष्ट कार्रवाई की जांच नहीं की, इस समारोह स्वचालित रूप से समय-समय पर बुलाया जाएगा।

इस कोड के लिए प्रणाली मात्रा परिवर्तन

+1

पर बना रहता है, क्या आप जानते हैं कि सिस्टम को वॉल्यूम हड प्रदर्शित करने के लिए कैसे रोकें? –

5

को नहीं रोकते हैं तेजी से 3: (जोड़ने के लिए याद रखें: आयात MediaPlayer ..)

override func viewDidLoad() { 
     super.viewDidLoad() 

     let volumeView = MPVolumeView(frame: CGRect(x: 0, y: 40, width: 300, height: 30)) 
     self.view.addSubview(volumeView) 
//  volumeView.backgroundColor = UIColor.red 
     NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged(notification:)), 
               name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), 
               object: nil) 
    } 


    func volumeChanged(notification: NSNotification) { 

     if let userInfo = notification.userInfo { 
      if let volumeChangeType = userInfo["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String { 
       if volumeChangeType == "ExplicitVolumeChange" { 
        // your code goes here 
       } 
      } 
     } 
    } 

....

+0

यह मेरे लिए काम है! –