2016-11-27 1 views
0

J'essaie de découvrir automatiquement les appareils Cast. C'est fondamentalement mot pour mot ce que j'ai vu pour faire ceci, cependant je ne reçois jamais le rappel pour onRouteAdded ou onRouteSelected.Android Cast - Rappel du routeur multimédia non retourné

J'ai essayé de changer les drapeaux utilisés, mais je n'ai pas obtenu de résultats différents. Parfois, la route sera ajoutée, mais jamais sélectionnée.

private void startSearchForDevicesAndCast() { 
    MediaRouter router = MediaRouter.getInstance(this); 

    int count = router.getRoutes().size(); 

    List<MediaRouter.RouteInfo> j = router.getRoutes(); 
    MediaRouteSelector selector = new MediaRouteSelector.Builder().addControlCategory(
      CastMediaControlIntent.categoryForCast(getString(R.string.app_id))).build(); 

    router.addCallback(selector, new MediaRouter.Callback() { 
     @Override 
     public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo route) { 
      super.onRouteAdded(router, route); 
      Log.i(TAG, "onRouteAdded: "); 
      router.selectRoute(route); 
     } 

     @Override 
     public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) { 
      super.onRouteChanged(router, route); 
      Log.i(TAG, "onRouteChanged: "); 
     } 

     @Override 
     public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo route) { 
      Log.i(TAG, "onRouteSelected: "); 
      super.onRouteSelected(router, route); 
     } 
    }, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN); 
} 
+0

quelle action prenez-vous que vous attendez le onRouteSelected (pour être appelé et il ne se passe pas? –

+0

@AliNaddaf désolé, libellé ma question fausse.Je me trompais et n'a pas obtenu le rappel pour onRouteAdded ou onRouteSelected. Parfois, le onRouteChanged retourne, mais je pense que c'est seulement parce qu'il est déjà dans la liste des routes des temps précédents, mais la route ne semble jamais changer non plus, mais je vois le rappel pour cela – Lucas

+0

Ok, laissez-moi écrire les étapes; puisque c'est un peu plus long, je vais l'écrire comme une réponse et non un commentaire. –

Répondre

0

Je crois que dans votre cas, vous devriez en faire un peu plus. Selon la configuration et la structure de votre application et d'autres facteurs, l'itinéraire que vous attendez peut déjà avoir été découvert par le MediaRouter. Dans ce cas, vous n'obtiendrez pas onRouteAdded() car il est déjà là. Pour cela, une approche consiste à appeler le router.addCallback(..) (comme vous le faites déjà), obtenir la liste de toutes les routes actuelles en appelant mMediaRouter.getRoutes() puis filtrer la liste de l'ID d'application qui vous intéresse (en utilisant le même sélecteur que vous avez défini et utilisé route.matchesSelector(selector)) et considérez cela comme votre ensemble initial de périphériques détectés. À partir de ce moment, les onRouteAdded() et onRouteRemoved() peuvent être utilisés pour mettre à jour la liste. Quant à onRouteChanged(), cela a parfois des informations précieuses; par exemple, lorsqu'un périphérique de distribution est redémarré, et quand il apparaît, il peut ne pas avoir la bonne configuration mais peu de temps après il obtient sa configuration et met à jour certains champs, puis onRouteChanged() est appelé mais dans la plupart des cas, vous pouvez ignorer cela et concentrez-vous sur l'ensemble initial et ceux qui sont ajoutés ou supprimés. Si vous voulez voir comment cela peut être mis en place, notez que ce que j'ai décrit ci-dessus est très proche de ce que le MediaRouterChooserDialog fait en interne et comme la source est ouvertement disponible dans la bibliothèque de support Media Router v7, vous pouvez jeter un coup d'oeil comment cela peut être fait.