-
初始化 Y2 API 环境。仅需一次。
// without log4j Y2Env.initial(); // with log4j Y2Env.initial(pathToLog4j); // android Y2Env.initial(true); // with log4j and JDK 8 Y2Env.initial(pathToLog4j, true);
-
连上特定的屏幕并执行一些命令。
// 1. 建立一个新的屏幕 Y2Screen screen = new Y2Screen("http://1.2.3.4"); // 2. 登入 if (!screen.login(user, pwd)) { return; } // 3. 做些事情 screen.turnOn(); screen.changeVolume(60); ... // 4. 注销 screen.logout();
-
将命令广播给同一网路上所有的控制器。
// 1. initial a service Y2ScreenFactory factory = new Y2ScreenFactory("192.168.1.1"); // 2. register a listen to handle responses. factory.listenSearchControllers(new ResponseHandler<SearchControllerOutput>() { @Override public void run(String pid, String barcode, SearchControllerOutput output) { System.out.println(pid); System.out.println(barcode); System.out.println(output.getIp()); } }); // 3. start factory.start(); // 4. execute factory.searchControllers();
API 仅能在 Java 8 环境建立 HTTPS 连线,同时还需取得控制器或中转服务器的凭证档案 (pem 或 cer)。
初始化 HTTPS 运行环境:
// with log4j and JDK 8
Y2Env.initial("log.properties", true);
// endpoint: 控制器或中转服务器位址,如 https://1.2.3.4
// filePath: 凭证档案,如 secure/y2.pem
Y2Env.addSecureTrust(endpoint, filePath);
//
Y2Screen screen = new Y2Screen("http://1.2.3.4");
// 载入 PFX 资讯
// pfxFile: PFX 档案,如 secure/y2.pfx
// password: PFX 档案密码
screen.loadPfx(pfxFile, password);
// 加载凭证档案至控制器
screen.enableCertificate();
// 切换控制器素材认证方式
screen.swtichMaterialVerify(MaterialVerifyType.SHA1);
// 1
Y2Screen screen = new Y2Screen("http://1.2.3.4");
// 2
if (!screen.login("guest", "guest")) {
return;
}
// 3
screen.syncTime(new Date());
screen.turnOff();
screen.turnOn();
screen.changeVolume(60);
screen.clearPlayResources();
// 4
screen.logout();
// 1
Y2Screen screen = new Y2Screen("http://1.2.3.4");
// 2
if (!screen.login("guest", "guest")) {
return;
}
// 3.1 建立一个跑马灯分区
MarqueeArea area = new MarqueeArea(0, 0, screen.getWidth(), 40);
area.addContent("Hello everyone.")
.fgColor(Color.green)
.getFont()
.size(16)
area.addContent("We are happy to announce that Y2 Java library has released.")
.fgColor(Color.blue)
.getFont()
.size(20);
// 3.2 建立一个可播放的节目
ProgramPlayFile prog = new ProgramPlayFile(1);
prog.getAreas().add(area);
// 3.3 写入节目,取得播放清单编号。
String listId = screen.writePlaylist(playFile);
// 3.4 播放
screen.play(listId);
// 4
screen.logout();
播放列表用于播放节目,由一个以上的节目组合而成。
ProgramPlayFile file1 = new ProgramPlayFile(1) // program_1
ProgramPlayFile file2 = new ProgramPlayFile(2) // program_2
String playlist = screen.writePlaylist(file1, file2, ...);
screen.play(playlist);
screen.checkPlayer() // 检查目前播放状态
ProgramPlayFile file1 = new ProgramPlayFile(1) // program_1
ProgramPlayFile file2 = new ProgramPlayFile(2) // program_2
String playlist = screen.writePlaylist(file1, file2, ...);
screen.playInstContent(playlist);
screen.checkPlayer() // 检查目前播放状态
节目用来规划屏幕上要显示的内容,内容透过区域进行管理。一个节目由一个以上的区域组合而成,每个区域有各自的显示位置与大小。
ProgramPlayFile file1 = new ProgramPlayFile(1) // program_1
file1.getAreas().add(area1);
file1.getAreas().add(area2);
file1.getPlayWeek().all();
file1.setPlayMode(PlayMode.COUNTER)
file1.setPlayCount(3);
file2.setPlayMode(PlayMode.TIMER)
file2.setPlayTime(45);
区域用来控制显示内容,内容包括:
- 跑马灯 (Marquee)
- 一般图文 (Text)
- 具备屏蔽效果的图文 (Textualize)
- 时间 (DatTime)
- 时钟 (Clock)
- 计数器 (Counter)
- 视频 (Video)
- 农历 (ChiCalendar)
- 动态效果 (Animation)
以上区域皆具备边框功能,默认关闭。
边框为一为围绕在区域周围的矩形,启用后,内容的有效可视范围会依据边框宽度缩小。
// 启用边框
AreaBorderStyle style = area.enableBorder(3);
style.animation(52, 8) // 特效 52, 速度 8
.blinkGrade(8); // 闪烁 8
// 取消边框
area.disableBorder();
跑马灯分区是一个单行文字的分区,将内容以水平移动的方式显示在屏幕上。
MarqueeArea area = new MarqueeArea(0, 0, 128, 30);
area.right2Left(true);
// page1
area.addContent("Hello everyone.")
.fgColor(Color.white) // 前景色
.bgColor(Color.black) // 背景色
.animationSpeed(16) // 特效播放速度
.getFont()
.size(24) // 字体大小
.bold() // 粗体
.strikethrough() // 删除线
.underline(); // 底线
// page2
area.addContent("We are happy to announce that Y2 Java library has released.")
.fgColor(Color.black) // 前景色
.bgColor(Color.white) // 背景色
.animationSpeed(1) // 特效播放速度
.getFont()
.size(20); // 字体大小
文字分区是一个以文字内容文主的分区,以节的方式添加,节与节之间会自动分页。
TextArea area = new TextArea(0, 0, 128, 64);
area.stuntType(10); // 特效
// section1
area.addTextSection("Hello everyone.")
.fgColor(Color.white) // 前景色
.bgColor(Color.black) // 背景色
.stayTime(8) // 单页停留时间
.animationSpeed(16) // 特效播放速度
.horizontalAlignment(AlignmentType.CENTER) // 水平对齐,置中
.verticalAlignment(AlignmentType.CENTER) // 垂直对齐,置中
.rowHeight(30) // 行高
.getFont()
.size(24)
.bold()
.strikethrough()
.underline();
// section2
area.addTextSection("We are happy to announce that Y2 Java library has released.")
.fgColor(Color.black) // 前景色
.bgColor(Color.white) // 背景色
.stayTime(9) // 单页停留时间
.animationSpeed(1) // 特效播放速度
.horizontalAlignment(AlignmentType.NEAR) // 水平对齐,靠左
.verticalAlignment(AlignmentType.FAR) // 水平对齐,靠下
.rowHeight(20) // 行高
.getFont()
.size(20);
与一般图文类似,主要差异为文字颜色用素材取代,背景为透明。
TextualizeArea area = new TextualizeArea(0, 0, 128, 64);
area.addMaterial("sample/textualize_bg.jpg");
TextualizeAreaTextMask page = area.addTextSection("Welcome to ONBON");
page.animationSpeed(4)
.horizontalAlignment(AlignmentType.NEAR)
.verticalAlignment(AlignmentType.NEAR);
.getFont()
.size(40)
.bold();
素材
文字渲染结果
日期时间分区将选择的日期、时间、星期样式组合并显示在屏幕上。若没有设定宽与高,日期时间分区会根据内容自动调分区大小显示完整的内容。
DateTimeArea area;
// 固定位置与大小
area = new DateTimeArea(100, 40, 200, 60);
// 固定位置,大小自动调整
area = new DateTimeArea(100, 40);
area.bgColor(Color.darkGray)
.horizontalAlignment(AlignmentType.CENTER);
// 第一行:显示时间与日期,格式为 AM 8:16 2019-02-15
area.addUnits(DateTimePattern.AMPM_H_MM, DateTimePattern.YYYY_MM_DD1)
.fgColor(Color.yellow);
.getFont()
.bold()
.underline();
// 第二行:显示星期
area.addUnits(DateTimePattern.WEEK);
// 第三行:显示月份
area.addUnits(DateTimePattern.MONTH);
.getFont()
.bold();
公告分区用于即刻显示一些重要的文字讯息。
// 取得管理程序
Y2BulletinManager bulletin = screen.bulletin();
// 建立公告一
BulletinArea area1 = new BulletinArea(1, "公告一", 0, 0, 200, 40);
area1.bgColor(Color.darkGry)
.fgColor(Color.red)
.content("News: We are happy to announce to release this API.")
// 建立公告二
BulletinArea area2 = new BulletinArea(2, "公告二", 0, 80, 200, 40);
area2.bgColor(Color.darkGry)
.fgColor(Color.green)
.content("News: Java Doc is available too.")
// 将公告一、公告二上传
bulletin.write(area1);
bulletin.write(area2);
// 播放
bulletin.play();
// 删除公告二
bulletin.delete(2);
// 停播
bulletin.stop();
动态分区可于即刻显示讯息,无须时间设置,所有讯息于重开机之后自动被删除。
// 取得管理程序
Y2DynamicManager dyn = screen.dynamic();
// 建立动态节目
DynamicPlayFile file = new DynamicPlayFile();
// 于节目中新增一个动态区
DynamicArea area = file.create(0, 0, 100, 40);
area.addText("Welcome to ONBON");
area.addText("We are happy to announce to release this API")
// 與節目播放 1 一起撥放
area.setRunMode(RunPGMode.PROGRAM_SYNC, 1);
// 将动态节目上传
dyn.write(file);
将命令广播给同一网路上所有的控制器。
-
在特定的网路上初始化服务
-
设定回覆处理介面(只需一次):
- listenSearchControllers - 搜寻控制器
- listenNetworkOption - 更新网路参数
- listenRestartNetwork - 重启
- listenConnectWifi - 连接 WIFI
- listenQueryWifiStatus - 查询 WIFI 状态
- listenDisconnectWifi - 中断 WIFI
- listenApProperties - 更新 AP 模式下的属性
-
启动
- 回覆的通讯埠(不可为 10001、10002)
-
执行一些命令:
- searchControllers - 搜寻控制器
- updateNetworkOption - 更新网路参数 (网路上只能有一个控制器)
- restartNetwork - 重启
- connectWifi - 连接 WIFI
- queryWifiStatus - 查询 WIFI 状态
- disconnectWifi - 中断 WIFI
- updateApProperties 更新 AP 模式下的属性 (网路上只能有一个控制器)
-
结束
// 1
String lan = "192.168.1.10";
Y2ScreenFactory factory = new Y2ScreenFactory(lan);
// 2.1
factory.listenSearchControllers(new ResponseHandler<SearchControllerOutput>() {
@Override
public void run(String pid, String barcode, SearchControllerOutput output) {
System.out.println(pid);
System.out.println(barcode);
System.out.println(output.getIp());
}
});
// 2.2
factory.listenWifiStatus(new ResponseHandler<QueryWifiStatusOutput>() {
@Override
public void run(String pid, String barcode, QueryWifiStatusOutput output) {
System.out.println(pid +", " + output.getWifiStatus());
}
});
// 3
factory.start(10003);
// 4.1
factory.searchControllers();
// 4.2
factory.queryWifiStatus();