Android Cast应用程序是基于发送者-接收者模型构建的,因此它需要具有发送者和接收者组件。发送者组件将负责将媒体传输到接收者组件。
下面是一个简单的示例,演示如何实现Android Cast发送者和接收者的功能。这个示例基于Google Cast SDK。
发送者(Sender)代码示例:
GoogleApiClient mApiClient;
MediaMetadata mediaMetadata;
MediaInfo mediaInfo;
/*初始化GoogleApiClient,在Activity的onCreate()方法中调用*/
public void initApiClient(Context context) {
mApiClient = new GoogleApiClient.Builder(context)
.addApi(Cast.API)
.addConnectionCallbacks(new GoogleCastConnectionCallbacks())
.build();
mApiClient.connect();
}
private class GoogleCastConnectionCallbacks implements GoogleApiClient.ConnectionCallbacks {
@Override
public void onConnected(Bundle bundle) {
try {
Cast.CastApi.launchApplication(mApiClient, APP_ID).setResultCallback(new ResultCallback() {
@Override
public void onResult(ApplicationConnectionResult result) {
if (result.getStatus().isSuccess()) {
//应用程序成功启动
loadRemoteMedia();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnectionSuspended(int i) {
}
}
private void loadRemoteMedia() {
mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MUSIC_TRACK);
mediaMetadata.putString(MediaMetadata.KEY_ARTIST, "艺术家名字");
mediaMetadata.putString(MediaMetadata.KEY_TITLE, "标题");
mediaInfo = new MediaInfo.Builder("http://url.to.file.mp3").setContentType("audio/mp3").setStreamType(MediaInfo.STREAM_TYPE_BUFFERED).setMetadata(mediaMetadata).build();
Cast.CastApi.loadMedia(mApiClient, mediaInfo, true).setResultCallback(new ResultCallback() {
@Override
public void onResult(RemoteMediaPlayer.MediaChannelResult result) {
if (result.getStatus().isSuccess()) {
//媒体加载
Toast.makeText(MainActivity.this, "Media loaded", Toast.LENGTH_SHORT).show();
} else {
//处理媒体加载错误
}
}
});
}
接收者(Receiver)代码示例:
public class ReceiverActivity extends CastReceiverHelper {
private static final String TAG = ReceiverActivity.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setVolumeControl