最新的 Cast SDK 发生了变化,导致它与旧版本的 Google Play 服务不兼容(崩溃)。
不幸的是,当使用最新的 Cast SDK 和过时的 GPS(或在模拟器上)时,即使 Cast 示例应用程序也会崩溃。
这个问题已经在这里讨论过:https://github.com/googlecast/CastVideos-android/issues/12
解决方案是在初始化任何强制转换组件(包括迷你控制器)之前检查 Google Play 服务版本(即,您不能只将迷你控制器片段放入 xml 布局文件中 - 您要么必须动态膨胀它,要么拥有两个布局文件 - 一个一个带迷你控制器,一个不带迷你控制器)。
检查GPS版本的代码:
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(context);
isGPSAvailable = (resultCode == ConnectionResult.SUCCESS);
如果结果不是ConnectionResult.SUCCESS
,不要初始化你的MiniControllerFragment
并且不访问CastContext
.
另外,请记住,它是not可以实例化MiniControllerFragment
using new MiniControllerFragment()
。你必须从 xml 中扩充它,否则你会得到NullPointerException
.
充气有两种方式MiniControllerFragment
:
-
创建单独的 xml 布局文件并在您的Activity.onCreate
:
setContentView(isGPSAvailable ? R.layout.activity_main_with_controller : R.layout.activity_main_without_controller);
Create ViewStub
在你的布局中指向MiniControllerFragment
并且仅当您有游戏服务时才对其充气。
活动布局:
<ViewStub
android:id="@+id/cast_minicontroller"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/cast_mini_controller_fragment"
/>
cast_mini_controller_fragment:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/castMiniController"
class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
您的活动中的代码onCreate()
:
ViewStub miniControllerStub = (ViewStub) findViewById(R.id.cast_minicontroller);
if (isGPSAvailable) {
miniControllerStub.inflate();
}
我更喜欢ViewStub
方法,因为它不会重复您的布局。