2013-09-04 22 views
9

kullanarak başka bir cihazda bir şarkı çalma Ben app bu şarkı sözleri var bluetooth kullanarak anter cihazı (iphone) bu çalma listesinden bir şarkı çalmak istiyorum. bluetooth

Bu

i birisi çalınabilir bir şarkı seçerek ?? bana yardım edin proceed.Could nasıl hiçbir fikrim yok Şimdi

#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 

please see the screen shot

için yapmış budur başka bir cihaz?

+0

GameKit kullanıyorsanız, Apple uygulamanız büyük olasılıkla uygulamanızı reddeder, ancak uygulamanız gerçek bir oyun değildir. – Wain

+0

Bazı ayrıntılar lütfen? Ben Gamekit.Thanks kullanıyorum çünkü – Machete

+0

GameKit oyunlar içindir. Apple, uygulamanız oyun değilse, kullanılmasına izin vermeyin. Uygulamanın oyuna benzer özellikleri olsa da, gerçekten bir oyun olmasa bile, genellikle reddeder. – Wain

cevap

1

GameKit, cihazlar arası oyunlar içindir. Bunun için, etkileşim kurduğunuz cihaza bağlı olarak CBPeripheralManager veya CBCentralManager'a bakmak isteyebilirsiniz. Düşük seviye, bu yüzden bağlantıyı kurmak için daha fazla iş yapmanız gerekecek, ancak size yardımcı olacak tonlarca öğretici ve örnek kod var.

+0

Bir platform Bluetooth Low Energy'yi desteklemiyorsa, onu kullanamıyorum, doğru mu? – Machete

+0

Evet, bu yalnızca BLE ile çalışır. – Mark

+0

Gamekit.Framework ya da başka bir framework ile gitmek zorundayım ama nasıl devam edeceğime dair hiçbir fikrim yok :( – Machete

0

Tamam, sıkıştığınız noktaya gelelim .. Aynı mantığı başka kütüphanelerle de kullanabilirsiniz, ancak böyle devam etmeli. Şarkı verisini parçalara göndermeniz ve diğer parçanın diğer uçta alınırken diğer cihaza senkronize edilmesi gerekecektir. Bluetooth'un mükemmel bir bant genişliğine sahip olmadığından emin olduğumuzdan, iletim oranınızı diğer cihaza özel olarak ayarlamanız gerekecek. o cihaz üzerinde çalışan cihaza gönderilen cihaza bir parça gönderildiğinde bu cihaz çalmalı ve gönderen cihazdan gelen yeni parçalar için paralel probda. Alıcı ucunda kullanım için sadece FIFO yöntemini kullanabilirsiniz. şarkı verilerinizin gelen parçaları.

+0

GameKit oyun içindir.Uygulama bir oyun değilse Apple'ın kullanılmasına izin vermeyin. app oyun gibi özellikler var ama onlar genellikle reddedecek bir oyun değil - Wain – Machete

+0

Bir şekilde bu mantık kullanarak çalıştım bu http://www.raywenderlich.com/12865/how-to-make- a-basit-oyun-kart-oyun-ile-multiplayer-ve-bluetooth-part-2 ... Ama şimdi tekrar sıkışmış :( – Machete

+0

Yaklaşımı, ben bahsettiğiniz linki kontrol ettim .. ama sadece Apple bir filtre kullandığından bir gamekit dışında başka bir mevcut kiti kullanmaya çalışın .. –