2014-08-01 4 views
2

Я прошел через этот 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 отмечены как установленные, и ничего не обновлять ...

+0

Несколько строк журнала, которые вы показываете, похоже, не связаны с вашим приложением. Показывает ли кнопка броска, например, в Google Play или любом другом приложении из Play Store? –

+0

Да, кнопка нажатия появляется в приложении YouTube. Также я могу использовать браузер google chrome (с использованием расширения chromecast). –

+0

Теперь я думаю, что это может быть проблема со старым Cast SDK. И я пытаюсь выяснить, как обновлять сервисы Google Play в Eclipse. Потому что в Android SDK Manager он помечается как установленный, и ничего не обновлять ... –

ответ

0

Мне просто пришлось подождать некоторое время (в моем случае я пошел спать и через 8 часов работал).

Смежные вопросы