Created
June 5, 2014 03:27
-
-
Save KazuyukiEguchi/0e9995d753a848c1364e to your computer and use it in GitHub Desktop.
Chromecastにキャストするサンプルアプリ作ってみた for Android ref: http://qiita.com/KazuyukiEguchi/items/ea137f4419d36d070535
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.castcast; | |
import com.google.android.gms.cast.CastMediaControlIntent; | |
import android.app.Activity; | |
import android.os.Bundle; | |
import android.support.v7.media.MediaRouteSelector; | |
import android.support.v7.media.MediaRouter; | |
import android.support.v7.media.MediaRouter.RouteInfo; | |
import android.util.Log; | |
public class MainActivity extends Activity | |
{ | |
private String TAG = "test"; | |
// Google Cast SDK Developer Consoleから取得した Application IDを設定してください | |
private static String APPLICATION_ID = "hogehoge"; | |
// Chromecastを探索するのに使う変数類 | |
private MediaRouter mRouter; | |
private MediaRouteSelector mMediaRouteSelector; | |
private MediaRouter.Callback mCB; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) | |
{ | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
// Chromecastを探す準備 | |
mRouter = MediaRouter.getInstance(this); | |
mMediaRouteSelector = new MediaRouteSelector.Builder().addControlCategory(CastMediaControlIntent.categoryForCast(APPLICATION_ID)).build(); | |
mCB = new MediaRouter.Callback() | |
{ | |
@Override | |
public void onRouteAdded(MediaRouter router, RouteInfo route) | |
{ | |
Log.d(TAG,"onRouteAdded=" + route.getName()); | |
} | |
@Override | |
public void onRouteRemoved(MediaRouter router, RouteInfo route) | |
{ | |
Log.d(TAG,"onRouteRemoved" + route.getName()); | |
} | |
}; | |
} | |
@Override | |
protected void onResume() | |
{ | |
super.onResume(); | |
// Chromecastを探す | |
mRouter.addCallback(mMediaRouteSelector, mCB,MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN); | |
} | |
@Override | |
protected void onPause() | |
{ | |
if (isFinishing()) | |
{ | |
mRouter.removeCallback(mCB); | |
} | |
super.onPause(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 最初に見つけたデバイスに接続を行う。 | |
if(mSelectedDevice == null) | |
{ | |
mSelectedDevice = CastDevice.getFromBundle(route.getExtras()); | |
Cast.CastOptions.Builder apiOptionsBuilder = Cast.CastOptions.builder(mSelectedDevice, mCastClientListener); | |
apiOptionsBuilder.setVerboseLoggingEnabled(true); | |
mApiClient = new GoogleApiClient.Builder(getBaseContext()) | |
.addApi(Cast.API, apiOptionsBuilder.build()) | |
.addConnectionCallbacks(mConnectionCallbacks) | |
.addOnConnectionFailedListener(mConnectionFailedListener) | |
.build(); | |
mApiClient.connect(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Chromecastに接続確認用コールバック | |
private GoogleApiClient.ConnectionCallbacks mConnectionCallbacks = new GoogleApiClient.ConnectionCallbacks() | |
{ | |
@Override | |
public void onConnected(Bundle connectionHint) | |
{ | |
Log.d(TAG,"onConnected"); | |
try | |
{ | |
Cast.CastApi.launchApplication(mApiClient, APPLICATION_ID, false) | |
.setResultCallback(new ResultCallback<Cast.ApplicationConnectionResult>() | |
{ | |
@Override | |
public void onResult(ApplicationConnectionResult result) | |
{ | |
Status status = result.getStatus(); | |
if (status.isSuccess()) | |
{ | |
mSessionId = result.getSessionId(); | |
Log.d(TAG,"mSessionID=" + mSessionId); | |
} | |
} | |
}); | |
} | |
catch(Exception ex) | |
{ | |
Log.d(TAG,ex.toString()); | |
} | |
} | |
@Override | |
public void onConnectionSuspended(int cause) | |
{ | |
} | |
}; | |
// Chromecastに接続失敗した場合に呼ばれる | |
private GoogleApiClient.OnConnectionFailedListener mConnectionFailedListener = new GoogleApiClient.OnConnectionFailedListener() | |
{ | |
@Override | |
public void onConnectionFailed(ConnectionResult result) | |
{ | |
} | |
}; | |
// Chromecastとの接続を解除する | |
private void peardown() | |
{ | |
if (mApiClient != null) | |
{ | |
if (mApiClient.isConnected()) | |
{ | |
try | |
{ | |
Cast.CastApi.stopApplication(mApiClient, mSessionId); | |
} | |
catch (Exception e) | |
{ | |
Log.e(TAG, "Exception while removing channel", e); | |
} | |
mApiClient.disconnect(); | |
} | |
mApiClient = null; | |
mSelectedDevice = null; | |
mSessionId = null; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="UTF-8"/> | |
<style type="text/css"> | |
body { | |
overflow:hidden; | |
} | |
div { | |
height:720PX; | |
width:1280PX; | |
text-align:center; | |
border:0px solid silver; | |
display: table-cell; | |
vertical-align:middle; | |
color:#FFFFFF; | |
background-color:#000000; | |
font-weight:bold; | |
font-family:Verdana, Geneva, sans-serif; | |
font-size:40px; | |
} | |
</style> | |
<title>Chromecastテストページ</title> | |
<script src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script> | |
<script type="text/javascript"> | |
window.onload = function() { | |
cast.receiver.logger.setLevelValue(0); | |
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance(); | |
console.log('Starting Receiver Manager'); | |
// handler for the 'ready' event | |
castReceiverManager.onReady = function(event) { | |
console.log('Received Ready event: ' + JSON.stringify(event.data)); | |
window.castReceiverManager.setApplicationState("Application status is ready..."); | |
}; | |
// handler for 'senderconnected' event | |
castReceiverManager.onSenderConnected = function(event) { | |
console.log('Received Sender Connected event: ' + event.data); | |
console.log(window.castReceiverManager.getSender(event.data).userAgent); | |
}; | |
// handler for 'senderdisconnected' event | |
castReceiverManager.onSenderDisconnected = function(event) { | |
console.log('Received Sender Disconnected event: ' + event.data); | |
if (window.castReceiverManager.getSenders().length == 0) { | |
window.close(); | |
} | |
}; | |
// handler for 'systemvolumechanged' event | |
castReceiverManager.onSystemVolumeChanged = function(event) { | |
console.log('Received System Volume Changed event: ' + event.data['level'] + ' ' + | |
event.data['muted']); | |
}; | |
// initialize the CastReceiverManager with an application status message | |
window.castReceiverManager.start({statusText: "Application is starting"}); | |
console.log('Receiver Manager started'); | |
}; | |
</script> | |
</head> | |
<body> | |
<div>Chromecastテストぺーじだよ〜〜〜ん</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment