我的工作为我分配了一份研究工作,如果技术上可行
使用Java Card 2.2.1从SIM Application Toolkit启动具有特定URL的浏览器。
我尝试使用sim.toolkit库中的ProactiveHandler。启动浏览器的确切代码看起来像这样
我的测试小程序只显示屏幕上的菜单项,当我点击它时,它应该启动浏览器。编辑更完整的源代码:
我处理事件的部分
private final byte[] GOOGLE = {(byte) 'h', (byte) 't', (byte) 't', (byte) 'p', (byte) ':', (byte) '/', (byte) '/', (byte) 'w', (byte) 'w', (byte) 'w', (byte) '.', (byte) 'g', (byte) 'o', (byte) 'o', (byte) 'g', (byte) 'l', (byte) 'e', (byte) '.', (byte) 'c', (byte) 'o', (byte) 'm'};
public void processToolkit(byte event) throws ToolkitException {
switch (event) {
case EVENT_MENU_SELECTION:
displayText(TEXT, (byte) 0, (byte) TEXT.length);
sendToBrowser(GOOGLE);
break;
case EVENT_FORMATTED_SMS_PP_ENV:
handleSMSComand();
break;
default:
return;
}
}
我这样做,当我点击菜单项时,它将调用我的sendToBrowser函数。 displayText函数只在屏幕上显示文本。我的完整功能代码是:
private byte sendToBrowser(byte[] data) throws ToolkitException {
if (MEProfile.check(PROFILE_LAUNCH_BROWSER)) {
try {
ProactiveHandler ph = ProactiveHandler.getTheHandler();
displayText(new byte[]{(byte) 'H', (byte) 'S'}, (byte) 0, (byte) 2);
try {
ph.init(PRO_CMD_LAUNCH_BROWSER, (byte) 0x00, DEV_ID_ME);
displayText(new byte[]{(byte) 'C', (byte) 'S'}, (byte) 0, (byte) 2);
try {
ph.appendTLV(TAG_URL, data, (short) 0, (short) data.length);
displayText(new byte[]{(byte) 'T', (byte) 'S'}, (byte) 0, (byte) 2);
try {
ph.send();
return displayText(new byte[]{(byte) 'S', (byte) 'S'}, (byte) 0, (byte) 2);
} catch (Exception te){
return displayText(new byte[]{(byte) 'S'}, (byte) 0, (byte) 1);
}
} catch (Exception te) {
return displayText(new byte[]{(byte) 'T'}, (byte) 0, (byte) 1);
}
} catch (Exception te) {
return displayText(new byte[]{(byte) 'C'}, (byte) 0, (byte) 1);
}
} catch (Exception te) {
return displayText(new byte[]{(byte) 'H'}, (byte) 0, (byte) 1);
}
} else {
return displayText(new byte[]{(byte) 'M'}, (byte) 0, (byte) 1);
}
}
代码在非iOS设备上运行但不启动浏览器。它不会抛出任何错误和ph.send();即使浏览器未启动,也能成功运行。所以我猜这种方法不再适用于最新的手机?我的测试手机都是高端的Android设备。
是否有其他方法可以使用Java Card 2.2.1启动浏览器?如果不是,我会报告它在技术上是不可能的,并且先前的方法不适用于较新的手机。
这是我的displayText函数,但它可能无关紧要
private byte displayText(byte[] messageBuffer, short offset, short length) {
byte result = RES_ERROR_CMD_DATA_NOT_UNDERSTOOD;
try {
if (length == 0) {
return 0;
}
ProactiveHandler ph = ProactiveHandler.getTheHandler();
ph.initDisplayText((byte) 0x81, DCS_8_BIT_DATA, messageBuffer,
offset, length);
result = ph.send();
} catch (Exception te) {
result = RES_ERROR_CMD_DATA_NOT_UNDERSTOOD;
}
return result;
}
答案 0 :(得分:1)
尽管我们正在测试SIM小程序以触发终端上带有相关主动命令(LAUNCH BROWSER
)的浏览器,但我们意识到,尽管终端对命令返回了肯定的响应,但浏览器并未弹出屏幕。终端供应商对此功能有依赖性,尽管返回了ACK,某些手机仍不支持。