Chromecast发送器应用程序未连接到Android Receiver应用程序,始终连接到Web接收器



我用ATV应用程序跟踪了这个codelab Cast Connect,这个Codelabfor Cast启用了一个Android应用程序,之后

  • 我在铸造控制台中添加了我的Chromecast作为测试设备
  • 签署ATV应用程序
  • 安装在电视盒子里,并试图从发送器应用程序中播放,但它打开的是网络接收器,而不是ATV应用程序发件人AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />

<queries>
<intent>
<action android:name="android.intent.action.VIEW" />

<data android:mimeType="video/* , application/x-mpegURL" />
</intent>
</queries>

<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:protectionLevel="signature"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.JMXPlayer"
android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute">
<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.stream.jmxplayer.casty.CastOptionProvider" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" /> 

发件人选项提供程序类


public class CastOptionProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context context) {
CastOptions customCastOptions = Casty.customCastOptions;
if (customCastOptions == null) {
List<String> buttonActions = createButtonActions();
int[] compatButtonAction = {1, 3};

NotificationOptions notificationOptions = new NotificationOptions.Builder()
.setActions(buttonActions, compatButtonAction)
.setTargetActivityClassName(ExpandedControlsActivity.class.getName())
.build();

CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
.setNotificationOptions(notificationOptions)
.setExpandedControllerActivityClassName(ExpandedControlsActivity.class.getName())
.build();
LaunchOptions launchOptions = new LaunchOptions.Builder()
.setRelaunchIfRunning(true)
.setAndroidReceiverCompatible(true).build();

return new CastOptions.Builder()
.setReceiverApplicationId(Casty.receiverId)
.setCastMediaOptions(mediaOptions)
.setLaunchOptions(launchOptions)
.build();
} else {
return customCastOptions;
}
}

private List<String> createButtonActions() {
return Arrays.asList(MediaIntentReceiver.ACTION_REWIND,
MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK,
MediaIntentReceiver.ACTION_FORWARD,
MediaIntentReceiver.ACTION_STOP_CASTING);
}

@Override
public List<SessionProvider> getAdditionalSessionProviders(Context context) {
return null;
}
} 

接收方AndroidManifest.xml


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.software.leanback"
android:required="true" />

<application
android:name=".JmxApplication"
android:allowBackup="true"
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.JMXPlayerCast">

<meta-data
android:name="com.google.android.gms.cast.tv.RECEIVER_OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.stream.jmxplayercast.CastReceiverOptionsProvider" />

<activity
android:name=".ui.MainActivity"
android:banner="@drawable/main_logo"
android:label="@string/app_name"
android:launchMode="singleTask"
android:logo="@drawable/circle_cropped_logo"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

<intent-filter>
<action android:name="com.google.android.gms.cast.tv.action.LAUNCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity
android:name=".ui.PlayerActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="com.google.android.gms.cast.tv.action.LOAD" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="http" />
<data android:scheme="https" />
<data android:mimeType="video/*" />
<data android:mimeType="application/*" />
</intent-filter>
</activity>

</application>

ReceiverOptionProver类是香草代码实验室的选项提供程序。我做错了什么以及如何解决这个问题。。提前感谢

代码正常。我的错误是把APP_ID放错了。

相关内容

最新更新