繁体   English   中英

如何在Java Card中使用Sim Toolkit中的URL启动浏览器

[英]How to launch browser with url from Sim Toolkit in Java Card

如果在技术上可行,我的工作分配了我一份研究工作

使用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;
    }

当我们对SIM小程序进行测试以触发终端上带有相关主动命令( LAUNCH BROWSER )的LAUNCH BROWSER ,我们意识到尽管终端对命令返回了肯定的响应,但浏览器并未在屏幕上弹出。 终端供应商对此功能有依赖性,尽管返回了ACK,某些手机仍不支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM