继承CastRemoteDisplayLocalService后onCreatePresentation未调用原因咨询
先直接回应你的核心疑问:Google Cast的App ID确实和注册时的包名强绑定,你用了示例的App ID但自己的包名不同,这极有可能是导致会话无法建立、进而onCreatePresentation不触发的关键原因。接下来我会分点梳理所有可能的原因,帮你逐一排查:
App ID与包名不匹配:在Google Cast开发者控制台创建App ID时,必须指定对应Android应用的包名,只有包名完全匹配的应用才能通过该App ID成功建立Cast会话。你使用示例的App ID但包名不同,Cast服务会直接拒绝你的连接请求,自然不会触发后续的presentation创建流程。建议你去开发者控制台创建自己的App ID,并绑定当前应用的包名。
服务未正确注册到Manifest:检查你的
AndroidManifest.xml,是否正确注册了自定义的CastRemoteDisplayLocalService子类?需要添加如下配置:<service android:name=".YourCustomCastService" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.cast.REMOTE_DISPLAY_SERVICE" /> </intent-filter> </service>缺少这个注册的话,系统无法识别你的服务,也就不会回调相关方法。
会话初始化流程有误:
onCreatePresentation是在Cast远程显示会话成功建立后才会触发的。你需要确认是否正确完成了会话初始化:- 初始化
CastRemoteDisplaySession实例 - 调用
startSession()方法,并且确保会话启动成功(可以通过CastRemoteDisplaySession.Callback的onSessionStarted回调确认)
如果会话没成功启动,自然不会走到创建presentation的步骤。
- 初始化
权限缺失:确保你的Manifest中声明了必要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.gms.permission.CAST_REMOTE_DISPLAY" />缺少这些权限会导致无法发现或连接Cast设备。
依赖库版本问题:检查你使用的Google Play Services Cast依赖版本,建议使用较新的稳定版本,避免因旧版本的bug导致回调不触发。比如在build.gradle中:
implementation 'com.google.android.gms:play-services-cast:21.3.0'Cast设备兼容性:确认你测试的Chromecast设备支持远程显示功能,部分早期的Chromecast型号可能不支持该特性。
内容的提问来源于stack exchange,提问作者user1724641

