2012-01-26 27 views
6

Tôi đang cố gắng bật hỗ trợ AirPlay trong ứng dụng của mình. Tôi không làm video; Tôi muốn sử dụng màn hình ngoài như một "màn hình thứ hai".iOS AirPlay: ứng dụng của tôi chỉ được thông báo về màn hình ngoài khi phản chiếu được BẬT?

Đây là vấn đề của tôi: nếu tôi chọn "AppleTV" từ nút AirPlay, ứng dụng của tôi sẽ không được thông báo. Thời gian duy nhất mà ứng dụng của tôi nhận được thông báo là khi tôi rời khỏi ứng dụng của mình, đi tới nút AirPlay ở cấp hệ điều hành, chọn "AppleTV" ở đó và bật Bắt chước. Nếu tôi tắt phản chiếu, ứng dụng của tôi sau đó sẽ được thông báo rằng màn hình ngoài đã biến mất.

Vì vậy:

  1. Tại sao không ứng dụng của tôi nhận được thông báo khi tôi chọn một màn hình ngoài từ trong ứng dụng của tôi không?
  2. Tại sao ứng dụng của tôi được thông báo về sự hiện diện của màn hình ngoài khi tôi bật tính năng phản chiếu ... và không phải trước đó? Tôi rõ ràng là hiểu nhầm điều gì đó, nhưng nó có vẻ như quay phản chiếu nên thông báo cho ứng dụng của tôi rằng màn hình bên ngoài đã biến mất (thay vì bây giờ có sẵn, vì hệ điều hành nên sử dụng màn hình ngoài đó để phản chiếu.)

Mẫu mã bên dưới. Cảm ơn trước sự giúp đỡ nào!

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    // Override point for customization after application launch. 

    // Is there already an external screen? 
    if (UIScreen.screens.count > 1)] 
    { 
      [self prepareExternalScreen:UIScreen.screens.lastObject]; 
    } 

    // Tell us when an external screen is added or removed. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(externalScreenDidConnect:) name:UIScreenDidConnectNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(externalScreenDidDisconnect:) name:UIScreenDidDisconnectNotification object:nil]; 

    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 

    // Add AirPlay control to view controller. 
    MPVolumeView* airplayButtonView = [[MPVolumeView alloc] init]; 
    airplayButtonView.frame = CGRectMake(300, 300, 50, 50); 
    airplayButtonView.backgroundColor = [UIColor blackColor]; 
    airplayButtonView.showsVolumeSlider = NO; 
    airplayButtonView.showsRouteButton = YES; 

    [self.viewController.view addSubview:airplayButtonView]; 


    [self.window makeKeyAndVisible]; 

    return YES; 
} 

#pragma mark - External screen handling 

- (void)externalScreenDidConnect:(NSNotification*)notification 
{ 
    [self prepareExternalScreen:notification.object]; 
} 

- (void)externalScreenDidDisconnect:(NSNotification*)notification 
{ 
    // Don't need these anymore. 
    self.externalWindow = nil; 
} 

- (void)prepareExternalScreen:(UIScreen*)externalScreen 
{ 
    NSLog(@"PREPPING EXTERNAL SCREEN."); 
    self.viewController.view.backgroundColor = [UIColor blueColor]; 
    CGRect frame = externalScreen.bounds; 
    self.externalWindow = [[UIWindow alloc] initWithFrame:frame]; 
    self.externalWindow.screen = externalScreen; 
    self.externalWindow.hidden = NO; 
    self.externalWindow.backgroundColor = [UIColor redColor]; 
} 

Trả lời

8

Thật không may. Màn hình phụ (màn hình phát sóng) chỉ có sẵn với tính năng phản chiếu.

Dưới đây là một ứng dụng cho thấy làm thế nào để thực hiện điều này: https://github.com/quellish/AirplayDemo

Nhìn vào mã của bạn, bạn nên nhận được UIScreenDidConnectNotification khi người dùng đi vào menu sóng và bật phản ánh trong khi ứng dụng của bạn đang hoạt động. Nút "Airplay", một bộ điều khiển MPVolumeView hoặc bộ điều khiển phim, không điều khiển phản chiếu (và do đó chức năng hiển thị bên ngoài). Video và âm thanh ra không may tách biệt với việc phản chiếu và chỉ có thể bật hoặc tắt tính năng phản chiếu bằng giao diện người dùng phản chiếu rộng của hệ thống.

Dòng dưới cùng: Bạn không thể bật màn hình AirPlay từ bên trong ứng dụng của mình.

+1

Cảm ơn. Và yuck: có vẻ như Apple đã làm một công việc khủng khiếp với giao diện người dùng về điều này. –

+0

Đây có phải là trường hợp không? Tôi thấy rằng bài đăng này khá cũ và tôi đang tìm kiếm một cách. – VaporwareWolf

2

Cuối cùng tìm thấy câu trả lời, bạn phải bật tính năng sao chép để nhận thông báo màn hình mới, nhưng sau đó bạn nên ghi đè màn hình bằng nội dung màn hình thứ hai của mình. Rất bối rối!

Xem ví dụ này:

UIScreen screens always return 1 screen

Bây giờ, phần tồi tệ nhất. Bạn có thể thêm nút AirPlay bên trong ứng dụng của mình bằng cách sử dụng tính năng này:

MPVolumeView *volumeView = [ [MPVolumeView alloc] init] ; 
[view addSubview:volumeView]; 

Tuy nhiên bạn không thể bật phản chiếu từ bộ chọn này! Và không có cách lập trình nào để bật tính năng phản chiếu.

How can I turn on AirPlay Screen Mirroring on the iPhone 4S programmatically

Vì vậy, rõ ràng là cách duy nhất để có một trải nghiệm màn hình thứ hai là để hướng dẫn người dùng của bạn làm thế nào để bật AirPlay từ đa nhiệm thanh và chắc chắn rằng họ lần lượt gương trên.

Các vấn đề liên quan