由于某些条件,我只想激活 Cast 功能,因此我不想在 onCreate 中出现任何 Cast 逻辑。我有一个 setupCast 方法,其中包含以下代码:
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,则不启动 Cast。我遇到的问题是,以这种方式初始化 mCastContext 时,我的 Cast 按钮不会显示。
但是,如果我只移动:
mCastContext = CastContext.getSharedInstance(_movieActivityContext);
进入我的 onCreate 方法并保持其他一切不变,“Cast”按钮就会显示。
最佳答案
您可以使用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;
}
请注意,系统在服务的主线程上调用此函数。服务的主线程与同一进程中运行的 Activity 进行 UI 操作的线程相同。您应该始终避免停止主线程的事件循环。当进行长时间运行的操作、网络调用或大量磁盘 I/O 时,您应该启动一个新线程或使用 AsyncTask .
正确初始化CastContext ,应用程序必须有一个实现OptionsProvider接口(interface)的类:
package com.example.app;
public class CastOptionsProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context appContext) {
...
}
}
并在 AndroidManifest.xml 中使用键 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" />
...
所有公共(public)方法都必须从主线程调用。
关于java - 如何在 onCreate 方法之外初始化 CastContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731002/