我如何发现使用的是Android一个Chromecast的设备? [英] How do I discover a Chromecast device using Android?

查看:1268
本文介绍了我如何发现使用的是Android一个Chromecast的设备?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想找到一个的Chromecast设备和调节音量。

解决方案
  1. 获取设备
  2. 让您的设备列入白名单(你需要的设备序列号,并为您的HTML5接收器的URL)
  3. 您会派出两名APPID(开发/生产)
  4. 在你的开发环境,请务必更新到Android支持库V18
  5. 您将使用<一个href="http://developer.android.com/reference/android/support/v7/mediarouter/package-summary.html">MediaRouter
  6. 在初始化

 进口com.google.cast.CastContext;
语境的applicationContext = ...; CastContext castContext =新
CastContext(的applicationContext);
 

  • 您将需要一个 MediaRouteButton

 &LT; android.support.v7.app.MediaRouteButton
  机器人:ID =@ + ID / media_route_button
  机器人:mediaRouteTypes =用户
  机器人:layout_width =WRAP_CONTENT
  机器人:layout_height =WRAP_CONTENT
  机器人:能见度=看见/&GT;
 

 进口com.google.cast.CastContext;
进口com.google.cast.CastDevice;
进口com.google.cast.MediaRouteAdapter;
进口com.google.cast.MediaRouteHelper;
进口com.google.cast.MediaRouteStateChangeListener;

进口android.support.v4.app.FragmentActivity;
进口android.support.v7.app.MediaRouteButton;
进口android.support.v7.media.MediaRouteSelector;
进口android.support.v7.media.MediaRouter;
进口android.support.v7.media.MediaRouter.RouteInfo;

公共类MyCastActivity扩展FragmentActivity实现MediaRouteAdapter {
     私人MediaRouteButton mMediaRouteButton;
     私人MediaRouter mMediaRouter;
     私人MediaRouteSelector mMediaRouteSelector;
     私人MediaRouter.Callback mMediaRouterCallback;
     私人CastDevice mSelectedDevice;
     私人MediaRouteStateChangeListener mRouteStateListener;

     @覆盖
     保护无效的onCreate(包savedInstanceState){
         super.onCreate(savedInstanceState);
         的setContentView(R.layout.my_cast_activity);
         mMediaRouteButton =(MediaRouteButton)findViewById(R.id.media_route_button);
 

  • 构造一个 CastContext

  mCastContext =新CastContext(getApplicationContext());
 

  - MinimalCastMediaRouteProvider 通过调用注册     MediaRouteHelper.registerMinimalMediaRouteProvider (),传递一个    对象实现的 MediaRouteAdapter 接口。

  MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext,这一点);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
 

  • 构造一个 MediaRouteSelector 通过调用 MediaRouteHelper.buildMediaRouteSelector() 。有两种形式的 这个方法:先不带任何参数,第二需要 接收器应用的名称和/或消息协议的列表。本 后一种形式,用于执行设备的过滤相当于 所做的SDK的 ApplicationSupportFilterListener

  mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector(MediaRouteHelper.CATEGORY_CAST);
 

  • 分配MediaRouteSelector到MediaRouteButton。

  mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
 

  • 实施一个 MediaRouter.Callback ,并把它添加到 MediaRouter , 通过 CALLBACK_FLAG_REQUEST_DISCOVERY MediaRouter 来 启动发现。当用户选择或取消选择的路线中的 GUI选择器,这个回调接口对应的方法 被调用。

  mMediaRouterCallback =新MyMediaRouterCallback();
}

@覆盖
保护无效的OnStart(){
   super.onStart();
    mMediaRouter.addCallback(mMediaRouteSelector,mMediaRouterCallback,
        MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
}

@覆盖
保护无效的onStop(){
    mMediaRouter.removeCallback(mMediaRouterCallback);
    super.onStop();
}

@覆盖
保护无效的onDestroy(){
    MediaRouteHelper.unregisterMediaRouteProvider(mCastContext);
    mCastContext.dispose();
    super.onDestroy();
}
 

  • MediaRouter.Callback onRouteSelected() 的回调,使呼叫 为 MediaRouteHelper.requestCastDeviceForRoute() 以获得 CastDevice对象对于所选择的媒体路线,以及 MediaRouteStateChangeListener 这将需要时通知 路由容量或连接状态的变化。

 私有类MyMediaRouterCallback扩展MediaRouter.Callback {
    @覆盖
    公共无效onRouteSelected(MediaRouter路由器,RouteInfo路线){
        MediaRouteHelper.requestCastDeviceForRoute(路线);
    }

    @覆盖
    公共无效onRouteUnselected(MediaRouter路由器,RouteInfo路线){
        mSelectedDevice = NULL;
        mRouteStateListener = NULL;
    }
}

// MediaRouteAdapter实施

@覆盖
公共无效onDeviceAvailable(CastDevice设备,
        MediaRouteStateChangeListener监听器){
    mSelectedDevice =设备;
    mRouteStateListener =侦听器;
}

@覆盖
公共无效onSetVolume(双量){
    //手柄体积变化。
}

@覆盖
公共无效onUpdateVolume(双三角翼){
    //手柄体积变化。
}
 

     

}

I'd like to discover a Chromecast device and adjust the volume.

解决方案

  1. Get a device
  2. Get your device whitelisted (you'll need the device serial #, and a URL for your HTML5 receiver)
  3. You'll be sent two APPID (development / production)
  4. In your development environment make sure to update to Android Support Library v18
  5. You'll be using MediaRouter
  6. Initialize

import com.google.cast.CastContext;     
Context applicationContext = …; CastContext castContext = new
CastContext(applicationContext);

  • You'll need a 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);

  • Construct a CastContext.

mCastContext = new CastContext(getApplicationContext());

- Register the MinimalCastMediaRouteProvider by calling MediaRouteHelper.registerMinimalMediaRouteProvider(), passing an object that implements the MediaRouteAdapter interface.

MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());

  • Construct a MediaRouteSelector by calling MediaRouteHelper.buildMediaRouteSelector(). There are two forms of this method: the first takes no parameters and the second takes a receiver application name and/or a list of message protocols. This latter form is used to perform device filtering equivalent to that done by the SDK’s ApplicationSupportFilterListener.

mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector( MediaRouteHelper.CATEGORY_CAST);

  • Assign the MediaRouteSelector to the MediaRouteButton.

mMediaRouteButton.setRouteSelector(mMediaRouteSelector);

  • Implement a MediaRouter.Callback and add it to the MediaRouter, passing CALLBACK_FLAG_REQUEST_DISCOVERY to the MediaRouter to initiate discovery. When the user selects or deselects a route in the GUI picker, the corresponding method on this callback interface will be invoked.

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

  • In the MediaRouter.Callback’s onRouteSelected() callback, make a call to MediaRouteHelper.requestCastDeviceForRoute() to obtain a CastDevice object for the selected media route, as well as the MediaRouteStateChangeListener that will need to be notified whenever route volume or connecting state changes.

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.
}

}

这篇关于我如何发现使用的是Android一个Chromecast的设备?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆