2016-08-02 13 views
1

特定の条件のためにキャスト機能を有効にしたいので、onCreateにキャストロジックを必要としません。onCreateメソッドの外部でCastContextを初期化する方法

private void setupCast(String appId) { 
    if (appId != null) { 
     Log.d(TAG, "Setting up Cast..."); 
     setupCastListener(); 
     CastOptionsProvider.setAppId(appId); 
     mCastContext = CastContext.getSharedInstance(_movieActivityContext); 
     mCastContext.registerLifecycleCallbacksBeforeIceCreamSandwich(this,  _savedInstanceState); 
     mCastSession = mCastContext.getSessionManager().getCurrentCastSession(); 
     mCastContext.getSessionManager().addSessionManagerListener(
       mSessionManagerListener, CastSession.class); 
     mediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), _menuForChromecastButton, R.id.media_route_menu_item); 
    } 
} 

アプリケーションの受信機IDがHTTP呼び出しを通じて渡されるとのAppIDがnullの場合は、キャストを開始していない:私は、次のコードを持っているsetupCastメソッドを持っています。問題は、このようにmCastContextを初期化するときにキャストボタンが表示されないことです。

私だけ移動する場合は、:私のonCreateメソッドに

mCastContext = CastContext.getSharedInstance(_movieActivityContext);

をし、それは方法他のすべてを維持し、キャストボタンが表示されます。

答えて

0

onStart(android.content.Intent、int、int)を使用できます。 startService(Intent)を呼び出してクライアントが明示的にサービスを開始するたびにシステムによって呼び出され、指定された引数と開始要求を表す一意の整数トークンを指定します。このメソッドを直接呼び出さないでください。

// This is the old onStart method that will be called on the pre-2.0 
// platform. On 2.0 or later we override onStartCommand() so this 
// method will not be called. 
@Override 
public void onStart(Intent intent, int startId) { 
handleCommand(intent); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
handleCommand(intent); 
// We want this service to continue running until it is explicitly 
// stopped, so return sticky. 
return START_STICKY; 
} 

システムがサービスのメインスレッドでこれを呼び出すことに注意してください。サービスのメインスレッドは、同じプロセスで実行されているアクティビティに対してUI操作が行われる同じスレッドです。メインスレッドのイベントループを停止することは、常に避けるべきです。長時間実行される操作、ネットワークコール、または大量のディスクI/Oを実行する場合は、新しいスレッドを開始するか、AsyncTaskを使用する必要があります。適切CastContextを初期化するために

、アプリケーションがOptionsProviderインタフェースを実装するクラス持っている必要があります。

package com.example.app; 

public class CastOptionsProvider implements OptionsProvider { 
@Override 
public CastOptions getCastOptions(Context appContext) { 
... 
} 
} 

を、キーOPTIONS_PROVIDER_CLASS_NAME_KEY

.. 

... 
<meta-data 
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" 
android:value="com.example.app.CastOptionsProvider" /> 
... 

とのAndroidManifest.xmlにその完全修飾クラス名を指定しますすべてのパブリックメソッドはメインスレッドから呼び出す必要があります。

関連する問題