点击Chromecast迷你控制器时Android应用崩溃求助
从你给出的报错日志来看,核心问题是ComponentName初始化时类名为null——这说明Cast框架在尝试启动扩展控制器Activity时,找不到对应的类配置。哪怕你遵循了标准流程,也有几个容易遗漏的关键点需要检查:
检查扩展控制器Activity的字符串配置
首先确认res/values/strings.xml里是否正确定义了扩展控制器的类名:<string name="cast_expanded_controller_activity_class_name">com.google.android.gms.cast.framework.media.ExpandedControllerActivity</string>如果你用的是自定义扩展控制器Activity,就替换成你自己的Activity全类名。这个配置是Cast框架用来找到扩展控制器的关键,缺失或错误都会导致类名null的问题。
确保扩展控制器Activity在Manifest中注册
打开AndroidManifest.xml,确认扩展控制器Activity已经正确注册,尤其是默认的ExpandedControllerActivity:<activity android:name="com.google.android.gms.cast.framework.media.ExpandedControllerActivity" android:launchMode="singleTask" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>注册时要注意
launchMode和theme的配置,这会影响控制器的正常启动。修复依赖中的拼写错误
你的依赖配置里,mediarouter-v7的写法有问题:// 错误写法:多了一个多余的v7: compile 'com.android.support:mediarouter-v7:v7:26.2.1' // 正确写法: compile 'com.android.support:mediarouter-v7:26.2.1'这个拼写错误可能导致Cast相关的类或资源加载异常,间接引发类名找不到的问题。
清理并重建项目
有时候Android Studio的缓存会导致配置无法正常生效,执行Build -> Clean Project,然后Build -> Rebuild Project,之后重新运行应用,很多配置类的问题都能通过这个步骤解决。
另外,如果你自定义了CastOptionsProvider,也要确保在getCastOptions方法里正确设置了扩展控制器的类名:
@Override public CastOptions getCastOptions(Context context) { return new CastOptions.Builder() .setReceiverApplicationId(context.getString(R.string.cast_app_id)) .setExpandedControllerActivityClassName(ExpandedControllerActivity.class.getName()) .build(); }
这些步骤应该能解决你遇到的迷你控制器点击崩溃问题,本质就是Cast框架找不到扩展控制器的正确入口类导致的NullPointerException。
内容的提问来源于stack exchange,提问作者Tony Lip

