0

キャスト デバイスを自動検出しようとしています。これは基本的に、これを行う方法について私が見たとおりですが、onRouteAddedまたはonRouteSelectedのコールバックを取得することはありません。

使用するフラグを変更しようとしましたが、異なる結果は得られませんでした。ルートが追加されることがありますが、選択されることはありません。

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);
}
4

1 に答える 1

2

私はあなたの場合、もう少しやる必要があると信じています。アプリの設定と構造、およびその他の要因によっては、予想されるルートが MediaRouter によって既に検出されている場合があります。その場合、 onRouteAdded() は既に存在するため、取得しません。これに対応するための 1 つの方法は、 router.addCallback(..)(既に行っているように) 呼び出した後、呼び出して現在のすべてのルートのリストを取得し、mMediaRouter.getRoutes()関心のあるアプリ ID のリストをフィルター処理することです (定義したのと同じセレクターを使用して) )を使用しroute.matchesSelector(selector)、それを検出されたデバイスの初期セットと見なします。その時点から、onRouteAdded()andonRouteRemoved()を使用してリストを更新できます。はどうかと言うとonRouteChanged()、それは時々貴重な情報を持っています; たとえば、キャスト デバイスが再起動されて起動したとき、最初は適切な構成を持っていない可能性がありますが、構成を取得して特定のフィールドを更新した直後にonRouteChanged()呼び出されますが、ほとんどの場合、それを無視できます。最初のセットと、追加または削除されるセットに注目してください。これがどのようにまとめられるかを確認したい場合は、上で概説したことが MediaRouterChooserDialog が内部で行うことに非常に近いことに注意してください。そのソースは Media Router v7 サポート ライブラリで公開されているため、見てみることができます。どのようにそれを行うことができます。

于 2016-12-03T02:38:46.827 に答える