Я прошел через этот https://developers.google.com/cast/docs/android_sender до пункта «Обращение с устройством». Я ожидаю, что кнопка броска должна появиться в панели действий, но это не так. И я полагаю, что устройство Chromecast не было обнаружено.Приложение Android Chromecast, кнопка броска не отображается в панели действий
У меня есть настоящее устройство Chromecast, и я зарегистрировал его в консоли разработчика Google Cast SDK. И я полагаю, что это устройство включено в белый список, потому что у меня есть доступ к http: // chromecast_device_ip: 9222
Я установил «checked» для опции «Отправить серийный номер Chromecast при проверке обновлений» 2 дня назад. И после этого я перезагрузил устройство.
Кроме того, я зарегистрировал приложение в Google Cast SDK Developer Console. Но он еще не опубликован. Я думаю, что это не может быть причиной, не так ли?
Я использую DEFAULT_MEDIA_RECEIVER_APPLICATION_ID как APP_ID. Но я также попробовал APP_ID моего зарегистрированного приложения.
Я попробовал образцы приложений из GitHub: https://github.com/googlecast Cast Tic-Tac-Toe, CastVideos-андроид, MediaRouter-Cast-Button-андроид. И во всех примерах приложений была та же проблема. Кнопка Cast не отображается.
В приложении 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>
UPDATE
Leon Николс сказал, что это известная проблема обнаружения в предыдущем выпуске Cast SDK. Новая версия 5.0.89 из Google Play Services должна работать нормально.
Я полагаю, что у меня есть старый выпуск Cast SDK. В Google-игра-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 Manager Google Play Services отмечены как установленные, и ничего не обновлять ...
Несколько строк журнала, которые вы показываете, похоже, не связаны с вашим приложением. Показывает ли кнопка броска, например, в Google Play или любом другом приложении из Play Store? –
Да, кнопка нажатия появляется в приложении YouTube. Также я могу использовать браузер google chrome (с использованием расширения chromecast). –
Теперь я думаю, что это может быть проблема со старым Cast SDK. И я пытаюсь выяснить, как обновлять сервисы Google Play в Eclipse. Потому что в Android SDK Manager он помечается как установленный, и ничего не обновлять ... –