Le Nexus Player est un petit boîtier rond que l'on branche à une TV qui permet d'afficher des films, des photos, et de jouer à des jeux. Bref, c'est un boîtier multimédia comme il en existe des dizaines (Apple TV, WD TV,...). Mais, contrairement à ses concurrents, le Nexus Player tourne sous Android. Il est donc possible de brancher et utiliser nos modules sur le Nexus Player.
Le Nexus Player n'utilise pas exactement la même version d'Android qu'un téléphone ou une tablette, mais Android TV qui est une version d'Android adaptée à la navigation avec une télécommande et sans écran tactile. Les deux versions partagent le même noyau et le même SDK, il est donc possible d'utiliser les librairies qui sont disponibles pour Android avec Android TV.
Le Nexus Player, la télécommande et le Yocto-MaxiPowerRelay
Pour vérifier que notre librairie Android fonctionne avec Android TV, nous avons écrit une petite application pour éteindre et allumer un amplificateur audio et une lampe. Concrètement, l'application va simplement commuter les sorties d'un Yocto-MaxiPowerRelay branché sur le port micro USB du boîtier. Les relais du Yocto-MaxiPowerRelay vont simplement débrancher les câbles d'alimentation de la lampe et de l'amplificateur.
Le Nexus Player possède un port HDMI, une prise d'alimentation et un port USB OTG
Pour cette application, nous sommes partis de l'exemple qui est fournit avec le SDK Android. L'exemple de Google est très complet et très bien documenté. Nous avons simplifié l'interface et ajouté quelques lignes pour appeler un service au lieu d'afficher la vidéo de l'exemple.
{
@Override
public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row)
{
...
YoctoIntentService.setRelayState(getActivity(), relay.getHwid(), relay.ison());
....
}
}
La méthode setRelayState appelle un IntentService qui initialise la librairie et commute une sortie du Yocto-MaxiPowerRelay dans un thread séparé.
{
private static final String ACTION_SET_RELAY_STATE =
"com.yoctopuce.testnexusplayer.action.SET_RELAY_STATE";
private static final String EXTRA_HWID = "HWID";
private static final String EXTRA_ISON = "ISON";
...
public static void setRelayState(Context context, String hwid, boolean isOn)
{
Intent intent = new Intent(context, YoctoIntentService.class);
intent.setAction(ACTION_SET_RELAY_STATE);
intent.putExtra(EXTRA_HWID, hwid);
intent.putExtra(EXTRA_ISON, isOn);
context.startService(intent);
}
....
@Override
protected void onHandleIntent(Intent intent)
{
if (intent != null) {
final String action = intent.getAction();
try {
YAPI.EnableUSBHost(getApplicationContext());
YAPI.RegisterHub("usb");
if (ACTION_SET_RELAY_STATE.equals(action)) {
String hwid = intent.getStringExtra(EXTRA_HWID);
boolean on = intent.getBooleanExtra(EXTRA_ISON, false);
YRelay relay = YRelay.FindRelay(hwid);
if (relay.isOnline()) {
relay.set_output(on ? YRelay.OUTPUT_ON : YRelay.OUTPUT_OFF);
}
}
} catch (YAPI_Exception e) {
e.printStackTrace();
}
YAPI.FreeAPI();
}
}
}
Pour que le projet compile sans erreur, il ne faut pas oublier d'ajouter une dépendance à la librairie Yoctopuce dans le fichier build.gradle.
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:recyclerview-v7:22.2.0'
compile 'com.android.support:leanback-v17:22.2.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.squareup.picasso:picasso:2.3.2'
compile 'com.yoctopuce.android:YoctoLib:1.10.20255'
}
Le code complet de l'application est disponible sur GitHub. Nous avons aussi publié l'application sur Google Play.
Une petite démo |
Nos modules fonctionnent parfaitement sous Android TV. Le Nexus Player est une solution intéressante si l'on désire présenter des mesures physiques sur un grand écran. Par exemple, afficher dans une salle de classe la température d'un liquide à l'aide d'un Yocto-PT100 lors d'une expérience.