Chromecast デバイスを検出して音量を調整したい。
7264 次
1 に答える
23
- デバイスを入手する
- デバイスをホワイトリストに登録します(デバイスのシリアル番号と HTML5 レシーバーの URL が必要です)。
- 2 つの APPID (開発/運用) が送信されます
- 開発環境で、必ず Android Support Library v18 に更新してください。
- MediaRouterを使用します
- 初期化する
import com.google.cast.CastContext;
Context applicationContext = …; CastContext castContext = new
CastContext(applicationContext);
- MediaRouteButtonが必要です
< android.support.v7.app.MediaRouteButton
android:id="@+id/media_route_button"
android:mediaRouteTypes="user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible" />
import com.google.cast.CastContext;
import com.google.cast.CastDevice;
import com.google.cast.MediaRouteAdapter;
import com.google.cast.MediaRouteHelper;
import com.google.cast.MediaRouteStateChangeListener;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.MediaRouteButton;
import android.support.v7.media.MediaRouteSelector;
import android.support.v7.media.MediaRouter;
import android.support.v7.media.MediaRouter.RouteInfo;
public class MyCastActivity extends FragmentActivity implements MediaRouteAdapter {
private MediaRouteButton mMediaRouteButton;
private MediaRouter mMediaRouter;
private MediaRouteSelector mMediaRouteSelector;
private MediaRouter.Callback mMediaRouterCallback;
private CastDevice mSelectedDevice;
private MediaRouteStateChangeListener mRouteStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_cast_activity);
mMediaRouteButton = (MediaRouteButton) findViewById(R.id.media_route_button);
- を構築し
CastContext
ます。
mCastContext = new CastContext(getApplicationContext());
- ()MinimalCastMediaRouteProvider
を呼び出し
て、インターフェイスMediaRouteHelper.registerMinimalMediaRouteProvider
を実装するオブジェクトを渡して登録しMediaRouteAdapter
ます。
MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
MediaRouteSelector
を呼び出し て a を構築しMediaRouteHelper.buildMediaRouteSelector()
ます。このメソッドには 2 つの形式があります。1 つ目はパラメーターを使用せず、2 つ目は受信側のアプリケーション名やメッセージ プロトコルのリストを受け取ります。この後者の形式は、SDK によって行われるものと同等のデバイス フィルタリングを実行するために使用されますApplicationSupportFilterListener
。
mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector( MediaRouteHelper.CATEGORY_CAST);
- MediaRouteSelector を MediaRouteButton に割り当てます。
mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
- を実装して
MediaRouter.Callback
に追加し、MediaRouter
に渡しCALLBACK_FLAG_REQUEST_DISCOVERY
てMediaRouter
検出を開始します。ユーザーが GUI ピッカーでルートを選択または選択解除すると、このコールバック インターフェイスの対応するメソッドが呼び出されます。
mMediaRouterCallback = new MyMediaRouterCallback(); } @Override protected void onStart() { super.onStart(); mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); } @Override protected void onStop() { mMediaRouter.removeCallback(mMediaRouterCallback); super.onStop(); } @Override protected void onDestroy() { MediaRouteHelper.unregisterMediaRouteProvider(mCastContext); mCastContext.dispose(); super.onDestroy(); }
MediaRouter.Callback
のonRouteSelected()
コールバックで、 を呼び出してMediaRouteHelper.requestCastDeviceForRoute()
、選択したメディア ルートの CastDevice オブジェクトを取得します 。また、MediaRouteStateChangeListener
ルート ボリュームまたは接続状態が変化するたびに通知する必要がある を呼び出します。
private class MyMediaRouterCallback extends MediaRouter.Callback { @Override public void onRouteSelected(MediaRouter router, RouteInfo route) { MediaRouteHelper.requestCastDeviceForRoute(route); } @Override public void onRouteUnselected(MediaRouter router, RouteInfo route) { mSelectedDevice = null; mRouteStateListener = null; } } // MediaRouteAdapter implementation @Override public void onDeviceAvailable(CastDevice device, MediaRouteStateChangeListener listener) { mSelectedDevice = device; mRouteStateListener = listener; } @Override public void onSetVolume(double volume) { // Handle volume change. } @Override public void onUpdateVolume(double delta) { // Handle volume change. }
}
于 2013-07-24T19:11:44.357 に答える