15

Chromecast デバイスを検出して音量を調整したい。

4

1 に答える 1

23
  1. デバイスを入手する
  2. デバイスをホワイトリストに登録します(デバイスのシリアル番号と HTML5 レシーバーの URL が必要です)。
  3. 2 つの APPID (開発/運用) が送信されます
  4. 開発環境で、必ず Android Support Library v18 に更新してください。
  5. MediaRouterを使用します
  6. 初期化する

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_DISCOVERYMediaRouter検出を開始します。ユーザーが 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.CallbackonRouteSelected()コールバックで、 を呼び出して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 に答える