사용자 정의 미디어 경로 공급자 만들기를 : 여기에 가짜 MediaRouteProvider입니다 맞춤 미디어 경로. 이 클래스는 위조 된 맞춤 MediaRoute을 게시하여 MediaRouter의 Cast SDK에서 표시하고 선택할 수 있도록합니다.
import android.content.Context;
import com.google.android.gms.cast.framework.Session;
import com.google.android.gms.cast.framework.SessionProvider;
public class CustomSessionProvider extends SessionProvider {
public static final String CUSTOM_CATEGORY = "CUSTOM";
public CustomSessionProvider(Context applicationContext) {
super(applicationContext, CUSTOM_CATEGORY);
}
@Override
public Session createSession(String sessionId) {
return new CustomSession(getContext(), getCategory(), sessionId);
}
@Override
public boolean isSessionRecoverable() {
return true;
}
}
그리고 세션 구현 :
import android.content.Context;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.Bundle;
import android.support.v7.media.MediaRouteDescriptor;
import android.support.v7.media.MediaRouteDiscoveryRequest;
import android.support.v7.media.MediaRouteProvider;
import android.support.v7.media.MediaRouteProvider.RouteController;
import android.support.v7.media.MediaRouteProviderDescriptor;
import android.support.v7.media.MediaRouter;
import java.util.ArrayList;
public final class CustomMediaRouteProvider extends MediaRouteProvider {
private static final ArrayList<IntentFilter> CONTROL_FILTERS_BASIC;
private static MediaRouteDescriptor DEFAULT_MEDIA_ROUTE_DESCRIPTOR;
static {
// This filter will be used by Cast SDK to match the session category.
IntentFilter customControls = new IntentFilter();
customControls.addCategory(CustomSessionProvider.CUSTOM_CATEGORY);
CONTROL_FILTERS_BASIC = new ArrayList<IntentFilter>();
CONTROL_FILTERS_BASIC.add(customControls);
Bundle extras = new Bundle();
extras.putCharSequence("ROUTE_URL", "http://abcdef.cyz");
DEFAULT_MEDIA_ROUTE_DESCRIPTOR =
new MediaRouteDescriptor.Builder("fake-custom-route-id", "fake custom route")
.setDescription("Foo description")
.addControlFilters(CONTROL_FILTERS_BASIC)
.setPlaybackStream(AudioManager.STREAM_MUSIC)
.setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE)
.setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE)
.setVolumeMax(100)
.setVolume(10)
.setExtras(extras)
.build();
}
public CustomMediaRouteProvider(Context context) {
super(context);
}
@Override
public void onDiscoveryRequestChanged(MediaRouteDiscoveryRequest request) {
if (request == null || request.getSelector() == null) {
return;
}
publishRoutes();
}
@Override
public RouteController onCreateRouteController(String routeId) {
return null;
}
private void publishRoutes() {
MediaRouteProviderDescriptor providerDescriptor =
new MediaRouteProviderDescriptor.Builder().addRoute(DEFAULT_MEDIA_ROUTE_DESCRIPTOR).build();
setDescriptor(providerDescriptor);
}
}
당신은 사용자 정의 세션에 대한 SessionProvider 구현을 필요로 여기에 사용자 정의 용지 경로 유형에 대한 가짜 세션 구현입니다.항상 시작/다시 시작/끝에서 성공합니다. 응용 프로그램에서
public class CastOptionsProvider implements OptionsProvider {
@Override
public List<SessionProvider> getAdditionalSessionProviders(Context appContext) {
List<SessionProvider> additionalProviders = new ArrayList<>();
additionalProviders.add(new CustomSessionProvider(appContext));
return additionalProviders;
}
}
가 MediaRouter 공급자 추가 : 당신의 캐스트 V3 보낸 응용 프로그램에서
import android.content.Context;
import android.os.Bundle;
import com.google.android.gms.cast.framework.Session;
public class CustomSession extends Session {
private static final String FAKE_SESSION_ID = "custom.session.id.12345";
CustomSession(Context applicationContext, String category, String sessionId) {
super(applicationContext, category, sessionId);
}
@Override
protected void start(Bundle routeInfoExtra) {
notifySessionStarted(FAKE_SESSION_ID);
}
@Override
protected void resume(Bundle routeInfoExtra) {
notifySessionResumed(false);
}
@Override
protected void end(boolean stopCasting) {
notifySessionEnded(0);
}
}
, 추가 세션 업체 지정
public class CastVideosApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MediaRouter mediaRouter = MediaRouter.getInstance(this);
mediaRouter.addProvider(new CustomMediaRouteProvider(this));
}
}
가 수행하려고 노력을 [캐스트 SDK v3의 Android Codelab] (https://codelabs.developers.google.com/codelabs/cast-videos-android/#0)? 또한이 [문서] (https://developers.google.com/cast/docs/android_sender_integrate)를 확인하십시오. –
예, 확인해 보았지만 캐스트가 아닌 기기를 추가하는 방법에 대해서는 아무 것도 없습니다. 우리는 SDK의 다른 모든 부분을 성공적으로 구현했습니다. – mennovogel
친구가 도와 줄 수 있으면이 항목 (https://productforums.google.com/forum/#!topic/chromecast/hoHJMeM5Qns)을 확인하십시오. –