如何解决Chromecast 发送器应用程序未连接到 Android 接收器应用程序,始终连接到网络接收器
我跟着这个代码实验室 Cast Connect with ATV App 和这个代码实验室 Cast-enable an Android app ,在那之后
- 我在 Cast 控制台中添加了我的 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 类是 vanilla codelab 的选项提供程序。 我做错了什么以及如何解决这个问题.. 提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。