2

Android アプリケーションに Miracast テクノロジーを追加したいと考えています。

そして、クリック後に接続できるディスプレイのリストを表示するmediaRouteButtonが必要です。これを作る方法は?私はこのコードを試しました(アクションバーのルートボタン):

public class MainActivity extends AppCompatActivity {

private Context context;

private MediaRouter.RouteInfo mRoute;
private MediaRouter mMediaRouter;
private MediaRouteSelector mSelector;
private RemotePlaybackClient mRemotePlaybackClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;

    mMediaRouter = MediaRouter.getInstance(this);

    mSelector = new MediaRouteSelector.Builder()
            .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
            .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
            .build();

}

@Override
public void onStart() {
    mMediaRouter.addCallback(mSelector, mMediaRouterCallback,
            MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
    super.onStart();
}

@Override
public void onStop() {
    mMediaRouter.removeCallback(mMediaRouterCallback);
    super.onStop();
}

private final MediaRouter.Callback mMediaRouterCallback = new MediaRouter.Callback() {

            @Override
            public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo route) {
                Log.d("TAG", "onRouteSelected: route=" + route);

                if (route.supportsControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)){

                    mRoute = route;
                    mRemotePlaybackClient = new RemotePlaybackClient(context, mRoute);
                }
            }

            @Override
            public void onRouteUnselected(MediaRouter router, MediaRouter.RouteInfo route, int reason) {
                Log.d("TAG", "onRouteUnselected: route=" + route);

                if (route.supportsControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)){

                    if (mRoute != null && mRemotePlaybackClient != null) {
                        mRemotePlaybackClient.release();
                        mRemotePlaybackClient = null;
                    }

                    mRoute = route;

                    if (reason != MediaRouter.UNSELECT_REASON_ROUTE_CHANGED) {

                    }
                }
            }
};


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.menu, menu);

    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider = (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);

    mediaRouteActionProvider.setRouteSelector(mSelector);

    return true;
}


}

そして私のmenu.xmlで:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/media_route_menu_item"
          android:title="menu item"
          app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
          app:showAsAction="always"/>

</menu>

しかし、このメニューボタンをクリックすると、接続できるディスプレイではなく、4つの奇妙なアイテムを含むダイアログが表示されます。そして、そのアイテムをクリックした後、アプリでクラッシュが発生しました。では、どうすればこの機能を実装できますか? ボタンをクリックし、このボタンをクリックすると、可能なディスプレイのリストが表示されます。ありがとうございます。

4

0 に答える 0