9

アプリにこの曲のプレイリストがあります。Bluetoothを使用して、このプレイリストの曲を別のデバイス(iPhone)で再生したいです。

これは私がそうしてきたことです

#import "BrowseStationsViewController.h"

@interface BrowseStationsViewController (){
GKSession *gkSession;
}

@end

@implementation BrowseStationsViewController

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

#pragma mark - 
  - (void)viewDidLoad
{
   [super viewDidLoad];
// Do any additional setup after loading the view

   [self setupSession];

NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

// Register for notifications when the application leaves the background state
// on its way to becoming the active application.
[defaultCenter addObserver:self
                  selector:@selector(setupSession)
                      name:UIApplicationWillEnterForegroundNotification
                    object:nil];

// Register for notifications when when the application enters the background.
[defaultCenter addObserver:self
                  selector:@selector(teardownSession)
                      name:UIApplicationDidEnterBackgroundNotification
                    object:nil];


       }

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



     #pragma mark - GKSession setup and teardown

  - (void)setupSession
 {
gkSession = [[GKSession alloc] initWithSessionID:nil displayName:nil sessionMode:GKSessionModePeer];
gkSession.delegate = self;
gkSession.disconnectTimeout = kDisconnectTimeout;
gkSession.available = YES;

self.title = [NSString stringWithFormat:@"GKSession: %@", gkSession.displayName];
   }

 - (void)teardownSession
 {
[gkSession disconnectFromAllPeers];
gkSession.available = NO;
gkSession.delegate = nil;
 }


 #pragma mark - GKSessionDelegate protocol conformance

 - (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:     (GKPeerConnectionState)state
{
switch (state)
{
    case GKPeerStateAvailable:
    {
        NSLog(@"didChangeState: peer %@ available", [session displayNameForPeer:peerID]);

        [NSThread sleepForTimeInterval:kSleepTimeInterval];

        [session connectToPeer:peerID withTimeout:kConnectionTimeout];
        break;
    }

    case GKPeerStateUnavailable:
    {
        NSLog(@"didChangeState: peer %@ unavailable", [session displayNameForPeer:peerID]);
        break;
    }

    case GKPeerStateConnected:
    {
        NSLog(@"didChangeState: peer %@ connected", [session displayNameForPeer:peerID]);
        break;
    }

    case GKPeerStateDisconnected:
    {
        NSLog(@"didChangeState: peer %@ disconnected", [session displayNameForPeer:peerID]);
        break;
    }

    case GKPeerStateConnecting:
    {
        NSLog(@"didChangeState: peer %@ connecting", [session displayNameForPeer:peerID]);
        break;
    }
}

[self.tableView reloadData];
     }


- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString  *)peerID
   {
NSLog(@"didReceiveConnectionRequestFromPeer: %@", [session displayNameForPeer:peerID]);

[session acceptConnectionFromPeer:peerID error:nil];

[self.tableView reloadData];
   }

    - (void)session:(GKSession *)session connectionWithPeerFailed:(NSString *)peerID withError:(NSError *)error
  {
NSLog(@"connectionWithPeerFailed: peer: %@, error: %@", [session displayNameForPeer:peerID], error);

[self.tableView reloadData];
    }

 - (void)session:(GKSession *)session didFailWithError:(NSError *)error
  {
NSLog(@"didFailWithError: error: %@", error);

[session disconnectFromAllPeers];

[self.tableView reloadData];
    }

 #pragma mark - UITableViewDataSource protocol conformance

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  {
// We have 5 sections in our grouped table view,
// one for each GKPeerConnectionState
return 3;
   }

   - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
  {
NSInteger rows;

NSInteger peerConnectionState = section;

switch (peerConnectionState)
{
    case GKPeerStateAvailable:
    {
        NSArray *availablePeers = [gkSession peersWithConnectionState:GKPeerStateAvailable];
        rows = availablePeers.count;
        break;
    }

    case GKPeerStateConnected:
    {
        NSArray *connectedPeers = [gkSession peersWithConnectionState:GKPeerStateConnected];
        rows = connectedPeers.count;
        break;
    }

    case GKPeerStateUnavailable:
    {
        NSArray *unavailablePeers = [gkSession peersWithConnectionState:GKPeerStateUnavailable];
        rows = unavailablePeers.count;
        break;
    }
}

// Always show at least 1 row for each GKPeerConnectionState.
if (rows < 1)
{
    rows = 1;
}

return rows;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *headerTitle = nil;

NSInteger peerConnectionState = section;

switch (peerConnectionState)
{
    case GKPeerStateAvailable:
    {
        headerTitle = @"Available Peers";
        break;
    }


    case GKPeerStateConnected:
    {
        headerTitle = @"Connected Peers";
        break;
    }


    case GKPeerStateUnavailable:
    {
        headerTitle = @"Unavailable Peers";
        break;
    }
}

return headerTitle;
 }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * cellId = @"Cell";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if(!cell){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}


NSInteger peerConnectionState = indexPath.section;

NSArray *peers = nil;

switch (peerConnectionState)
{
    case GKPeerStateAvailable:
    {
        peers = [gkSession peersWithConnectionState:GKPeerStateAvailable];
        break;
    }

    case GKPeerStateConnected:
    {
        peers = [gkSession peersWithConnectionState:GKPeerStateConnected];
        break;
    }


    case GKPeerStateUnavailable:
    {
        peers = [gkSession peersWithConnectionState:GKPeerStateUnavailable];
        break;
    }
}

NSInteger peerIndex = indexPath.row;

if ((peers.count > 0) && (peerIndex < peers.count))
{
    NSString *peerID = [peers objectAtIndex:peerIndex];

    if (peerID)
    {
        cell.textLabel.text = [gkSession displayNameForPeer:peerID];
    }
}

return cell;
 }

  @end

スクリーンショットをご覧ください

どうすればいいのかわかりません。誰か助けてください??曲を選択すると、別のデバイスで再生できますか??

4

2 に答える 2

1

GameKit はデバイス間ゲーム用です。これについては、対話しているデバイスに応じて、おそらくCBPeripheralManagerまたはCBCentralManagerを確認する必要があります。これは低レベルなので、接続をセットアップするにはさらに多くの作業を行う必要がありますが、役立つチュートリアルとサンプル コードがたくさんあります。

于 2013-09-05T01:34:10.053 に答える