【问题标题】:Android Chromecast sender app, cast button doesn't appear in action barAndroid Chromecast 发件人应用,投射按钮未出现在操作栏中
【发布时间】:2014-09-24 11:24:02
【问题描述】:

我经历了这个https://developers.google.com/cast/docs/android_sender 最多包括“处理设备选择”段落。 我希望投射按钮应该出现在操作栏中,但事实并非如此。而且我想 Chromecast 设备没有被发现。

我有真正的 Chromecast 设备,并在 Google Cast SDK 开发者控制台中注册了它。 而且我认为该设备已列入白名单,因为我可以访问 http://chromecast_device_ip:9222

我在 2 天前将“检查更新时发送此 Chromecast 的序列号”选项设置为“已检查”。然后我重新启动了设备。

另外,我在 Google Cast SDK Developer Console 中注册了一个应用程序。但它还没有发布。 我认为这不可能是原因,不是吗?

我使用 DEFAULT_MEDIA_RECEIVER_APPLICATION_ID 作为 APP_ID。但我也尝试了我注册的应用程序的 APP_ID。

我尝试了来自 GitHub 的示例应用程序: https://github.com/googlecast 铸造井字游戏, CastVideos-android, MediaRouter-Cast-Button-android。 在所有示例应用程序中都是同样的问题。没有出现投射按钮。

在 DIAL CLient 应用程序(作者娱乐)中一切正常。但我不确定这是我实现 Chromecast 发件人应用程序所需要的......

这是我的代码:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testcastbtn"
android:versionCode="1"
android:versionName="1.0" >

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

MainActivity.java

package com.example.testcastbtn;

import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.cast.CastMediaControlIntent;
import com.google.android.gms.common.GooglePlayServicesUtil;

import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.MediaRouteActionProvider;
import android.support.v7.media.MediaRouteSelector;
import android.support.v7.media.MediaRouter;
import android.support.v7.media.MediaRouter.RouteInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends ActionBarActivity {

private MediaRouter mMediaRouter;
private MediaRouteSelector mMediaRouteSelector;
private MyMediaRouterCallback mMediaRouterCallback;
public CastDevice mSelectedDevice;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mMediaRouter = MediaRouter.getInstance(getApplicationContext());
    mMediaRouteSelector = new MediaRouteSelector.Builder()
        .addControlCategory(CastMediaControlIntent.categoryForCast(
                CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID))
        .build();        
    mMediaRouterCallback = new MyMediaRouterCallback();
    int isGAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
}

private class MyMediaRouterCallback extends MediaRouter.Callback {    

    @Override
    public void onRouteSelected(MediaRouter router, RouteInfo info) {
        mSelectedDevice = CastDevice.getFromBundle(info.getExtras());
    }

    @Override
    public void onRouteUnselected(MediaRouter router, RouteInfo info) {
        mSelectedDevice = null;
    }
}

@Override
protected void onStart() {      
    super.onStart();
    mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
            MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}

@Override
protected void onResume() {
  super.onResume();
  mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
                                MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}

@Override
protected void onPause() {
  if (isFinishing()) {
    mMediaRouter.removeCallback(mMediaRouterCallback);
  }
  super.onPause();
}

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
    MediaRouteActionProvider mediaRouteActionProvider = 
      (MediaRouteActionProvider) MenuItemCompat.getActionProvider(mediaRouteMenuItem);
    mediaRouteActionProvider.setRouteSelector(mMediaRouteSelector);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.media_route_menu_item) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.testcastbtn.MainActivity" >

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


</menu>

另外,我在 LogCat 中遇到了下一个错误。但它不会导致应用崩溃。

08-01 16:21:17.644: E/ExternalAccountType(547): Unsupported attribute readOnly
08-01 16:21:19.196: E/MediaProvider(21126): invalid album art, error creating album thumb file
08-01 16:21:22.249: E/dalvikvm(21520): Could not find class 'com.google.android.apps.youtube.app.remote.bi', referenced from method com.google.android.apps.youtube.app.remote.bh.<init>
08-01 16:21:22.269: E/dalvikvm(21520): Could not find class 'com.google.android.apps.youtube.core.player.notification.a', referenced from method com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14.<init>

更新

Leon Nicholls 表示,在 Cast SDK 的先前版本中,这是一个已知的发现问题。新版本 5.0.89 的 Google Play 服务应该可以正常工作。

我想我有一个旧版本的 Cast SDK。 在 google-play-services_lib/AndroidManifest.xml 我看到下一个

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="5077000" android:versionName="5.0.77-000"

但我不知道如何更新它。在 Android SDK 管理器中,Google Play 服务标记为已安装,并且没有要更新的内容......

【问题讨论】:

  • 您显示的那几行日志似乎与您的应用无关。是否会为 Google Play 音乐或 Play 商店中的任何第三方应用显示投射按钮?
  • 是的演员按钮出现在 youtube 应用程序中。我也可以从 google chrome 浏览器投射(使用 chromecast 扩展)。
  • 现在我认为旧的 Cast SDK 可能有问题。我试图找出如何在 Eclipse 中更新 Google Play 服务。因为在 Android SDK Manager 中它被标记为已安装并且没有什么要更新的......
  • @AliNaddaf 重新导入播放服务库有帮助。投射按钮在过去 3 天内出现。它工作得很好。几分钟前它突然消失了。我又遇到了同样的问题......我只是注意到我的 android SDK 管理器中出现了 google play 服务的更新。 rev 19 可供我使用。现在我看到我的 google play services lib 是 5.0.89 版本。我没有更改项目中的任何内容,它只是停止工作......也在所有示例应用程序中(例如 VideoCast)。我再次尝试重新导入 lib,但没有帮助。

标签: android google-cast


【解决方案1】:

我只需要等待一段时间(在我的情况下,我去睡觉了,8 小时后它起作用了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多