简体   繁体   中英

iOS Volume buttons controller app button

ok so I have my listener set up in my application so it is reading when I click on the external volume buttons. My question is and seems I am stuck on this is that I have two buttons in my application identified as:

- (IBAction)sendMessage:(id)sender;
- (IBAction)cancelMessage:(id)sender;

When I click on the Up ^ physical button on my iPad, I want it to link up with the,

- (IBAction)sendMessage:(id)sender;

And with the down physical button, Need to link with the, - (IBAction)cancelMessage:(id)sender;

Here is my code where I am stuck on:

#import "FirstViewController.h"
#import "AppDelegate.h"
#import "AudioToolbox/AudioServices.h"
#import <MediaPlayer/MediaPlayer.h>



@interface FirstViewController ()


@property (nonatomic, strong) AppDelegate *appDelegate;

-(void)sendMyMessage;
-(void)didReceiveDataWithNotification:(NSNotification *)notification;

@end

@implementation FirstViewController

// ADDED THIS SECTION------------------------------------------------------------

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

// ADDED THIS SECTION------------------------------------------------------------


int Count=0;

- (void)viewDidLoad
{
 // ADDED THIS SECTION------------------------------------------------------------


    UISwitch *switcher = [[UISwitch alloc] init];
    switcher.center = self.view.center;
    [switcher addTarget: self action: @selector(volumeListener_onOff:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:switcher];

 // ADDED THIS SECTION------------------------------------------------------------



    [super viewDidLoad];



    // Do any additional setup after loading the view, typically from a nib.

    _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    _txtMessage.delegate = self;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didReceiveDataWithNotification:)
                                                 name:@"MCDidReceiveDataNotification"
                                               object:nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



 // ADDED THIS SECTION------------------------------------------------------------
 // ADDED THIS SECTION------------------------------------------------------------

- (void) volumeListener_onOff:(id)sender
{
    UISwitch *onOff = (UISwitch *) sender;

    if(onOff.on){
        volumeListener = [[VolumeListener alloc] init];
        [[self.view viewWithTag:54870149] removeFromSuperview];
        [self.view addSubview: [volumeListener dummyVolume]];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeChanged:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
    }
    else{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];
        [[self.view viewWithTag:54870149] removeFromSuperview];
    }
}


 // ADDED THIS SECTION------------------------------------------------------------
 // ADDED THIS SECTION------------------------------------------------------------


- (void)volumeChanged:(NSNotification *)notification{
    if(volumeListener.runningVolumeNotification==FALSE){
        dispatch_async(dispatch_get_main_queue(), ^{
            volumeListener.runningVolumeNotification = TRUE;
            MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];
            [musicPlayer setVolume:volumeListener.systemVolume];

            // do what you want to accomplish here
            [self.view setAlpha:0.0f];
            [UIView beginAnimations:@"flash screen" context:nil];
            [UIView setAnimationDuration:0.1f];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
            [self.view setAlpha:1.0f];
            [UIView commitAnimations];

            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                volumeListener.runningVolumeNotification = FALSE;
            });
        });
    }
}

// ADDED THIS SECTION------------------------------------------------------------
// ADDED THIS SECTION------------------------------------------------------------

#pragma mark - UITextField Delegate method implementation

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [self sendMyMessage];
    return YES;
}


#pragma mark - IBAction method implementation

- (IBAction)sendMessage:(id)sender {
    [self sendMyMessage ];
}

- (IBAction)cancelMessage:(id)sender {
    [self sendMyadditionMessage ];
}


#pragma mark - Private method implementation

// THIS IS THE SECTION FOR ADDITION ----------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------

-(void)sendMyMessage{


    NSData *dataToSend = [_txtMessage.text dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers;
    NSError *error;

    [_appDelegate.mcManager.session sendData:dataToSend
                                     toPeers:allPeers
                                    withMode:MCSessionSendDataReliable
                                       error:&error];

    if (error) {
        NSLog(@"%@", [error localizedDescription]);
    }

    [_tvChat setText:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"\n%@\n\n", _txtMessage.text]]];
    [_txtMessage setText:@""];

    // THIS IS WHAT STARTS THE COUNT FOR THE TEXT
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", Count--];
    _txtMessage.text = numValue;
    // END CODE FOR COUNT

}


// START SECTION FOR ADDITION ---------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------

-(void)sendMyadditionMessage{
    NSData *dataToSend = [_txtMessage.text dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers;
    NSError *error;

    [_appDelegate.mcManager.session sendData:dataToSend
                                     toPeers:allPeers
                                    withMode:MCSessionSendDataReliable
                                       error:&error];

    if (error) {
        NSLog(@"%@", [error localizedDescription]);
    }

    [_tvChat setText:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"\n%@\n\n", _txtMessage.text]]];
    [_txtMessage setText:@""];

    // THIS IS WHAT STARTS THE COUNT FOR THE TEXT
    NSString *numValue = [[NSString alloc] initWithFormat:@"%d", Count++];
    _txtMessage.text = numValue;
    // END CODE FOR COUNT


    if(Count == 3) {
        return [self vibrate];
    };
}


// END SECTION FOR ADDITION ---------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------

-(void)vibrate
{
    NSLog(@"I'm vibrating");
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}


-(void)didReceiveDataWithNotification:(NSNotification *)notification{
    MCPeerID *peerID = [[notification userInfo] objectForKey:@"peerID"];
    NSString *peerDisplayName = peerID.displayName;

    NSData *receivedData = [[notification userInfo] objectForKey:@"data"];
    NSString *receivedText = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];

    [_tvChat performSelectorOnMainThread:@selector(setText:) withObject:[_tvChat.text stringByAppendingString:[NSString stringWithFormat:@"%@ wrote:\n%@\n\n", peerDisplayName, receivedText]] waitUntilDone:NO];
}

@end

May I make a suggestion? Use RBVolumeButtons , an open source class that lets you easily steal the volume buttons. I use this in my app and it works perfectly. Let me know if you have any questions about how to use it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM