以下是我的代碼在主要活動爲什麼我的MediaRouteButton無法找到任何投射設備?
public class MainActivity extends ActionBarActivity{
private MediaRouteButton mMediaRouteButton;
private MediaRouteSelector mMediaRouteSelector;
private MediaRouter mMediaRouter;
private CastDevice mSelectedDevice;
private MyMediaRouterCallback mMediaRouterCallback;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(this.checkGooglePlaySevices(this))
Log.v("cc5zhenhua","googleplayservice okay");
else
{
Log.v("cc5zhenhua","googleplayservice not ok");
//GooglePlayServicesUtil.getErrorDialog(0, this, 0).show();
}
//initialize media cast objects
mMediaRouter=MediaRouter.getInstance(getApplicationContext());
mMediaRouteSelector=new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.CATEGORY_CAST).build();
mMediaRouterCallback= new MyMediaRouterCallback();
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback);
}
public void onStart() {
super.onStart();
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback
);
MediaRouter.RouteInfo route = mMediaRouter.updateSelectedRoute(mMediaRouteSelector);
// do something with the route...
}
@Override
protected void onResume()
{
super.onResume();
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
super.onCreateOptionsMenu(menu);
//mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main, menu);
MenuItem mediaRouteItem = menu.findItem(R.id.action_mediaroute01);
MediaRouteActionProvider mediaRouteActionProvider =
(MediaRouteActionProvider)MenuItemCompat.getActionProvider(
mediaRouteItem);
mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);
mMediaRouteButton = (MediaRouteButton) mediaRouteItem.getActionView();
return true;}
public boolean checkGooglePlaySevices(final Activity activity) {
final int googlePlayServicesCheck = GooglePlayServicesUtil.isGooglePlayServicesAvailable(
activity);
switch (googlePlayServicesCheck) {
case ConnectionResult.SUCCESS:
return true;
default:
Log.v("cc5zhenhua","test"); }
return false;
}
private class MyMediaRouterCallback extends MediaRouter.Callback
{
@Override
public void onRouteSelected(MediaRouter router, RouteInfo info) {
mSelectedDevice = CastDevice.getFromBundle(info.getExtras());
String routeId = info.getId();
Log.v("cc5zhenhua", "MainActivity.onRouteSelected");
}
@Override
public void onRouteUnselected(MediaRouter router, RouteInfo info) {
//teardown();
mSelectedDevice = null;
}
}
}
有沒有生成錯誤。但是,當我運行主要活動時,媒體路線按鈕根本無法點擊。請告知我錯過了哪些地方?謝謝!
在發佈新SDK之前,我的chromecast被白名單註冊了APPID。 我無法將該appID用於控件類別,它會引發無效的appID異常。
我的投射設備也可用於我的電腦中的chromecast擴展。
謝謝。我有一個問題: mMediaRouter和mMediaRouteButton似乎不相關,即使我添加回調到mMediaRouter,如何使mMediaRouteButton可用? 我錯過了相關的mMediaRouter到mMediaRouteButton的配置嗎? – cc5zhenhua
我可以訪問chromecast調試頁面http:// [chromecastip]:9222。 – cc5zhenhua
MediaRouter和MediaRouterButton在內部是相關的,因爲按鈕的行爲由MediaRouter框架管理。一般而言,最簡單的方法是使用MediaRouteActionProvider。如果你可以使用它,建議這樣做;我們的github回購中有許多樣本使用該樣本。正如我前面提到的那樣添加回調會啓動投射設備的(mDNS)掃描並使用您的選擇器標準,它會嘗試查找可用候選項,如果您單擊投射按鈕將顯示可用候選項,無論您採取兩種方法中的哪一種。 –