手机开发----监听定制协议的url链接

在网页中,通常链接的形式如下:

<a href="http://www.baidu.com/">Baidu</a>

 

这是基于http协议的,由浏览器来根据http协议来具体实现请求和展现。

在手机开发中,有时候会遇到这种情况:某个页面由WebView加载,当点击网页中的某个链接时,希望跳转到用native sdk开发的某个页面去。(比如说手机上第三方应用调用weibo登陆成功后的跳转)

 

其实就是个网络协议的问题,浏览器监听的是常见的http/https/ftp...协议,我们现在要做的是:

制定一个自己的协议(本例中协议名为:synnex),我们在程序中监听这个协议,当浏览器访问该协议下的某个链接时,会被我们程序拦截到。

 

一、Android平台的处理方式:

1,html页面:

<a href='synnex://mobile.phonegap?username=test&password=123'>To native page</a>

 

这种方式更好一点,如果手机上有安装packageid,则打开该应用,否则跳转到google store下载页面。

<a href="intent://mobile.phonegap/#Intent;scheme=synnex;package=packageid;end">To native page</a>

  

 

2,AndroidManifest.xml:

        <activity android:name=".NativeActivity">
            <intent-filter >
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="synnex" android:host="mobile.phonegap"/>
            </intent-filter>
        </activity>

 

 

3,NativeActivity.java:

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.native_page);
        String username = getIntent().getData().getQueryParameter("username");
        String password = getIntent().getData().getQueryParameter("password");
    }

 

 

 

二、Blackberry平台的处理方式:

1,html页面同上

2,Screen页面采用BrowserField: (监听我们自定义的协议)

    public MyScreen()
    {
        BrowserFieldConfig config = new BrowserFieldConfig();
        config.setProperty(BrowserFieldConfig.ALLOW_CS_XHR, Boolean.TRUE);
        config.setProperty(BrowserFieldConfig.JAVASCRIPT_ENABLED, Boolean.TRUE);
        BrowserField browserField = new BrowserField(config);
        ProtocolController protocolController = (ProtocolController)browserField.getController();
        protocolController.setNavigationRequestHandler("synnex", new BrowserFieldNavigationRequestHandler()
        {
            public void handleNavigation(BrowserFieldRequest request) throws Exception
            {
                //Logger.info("## " + request.getProtocol() + " , " + request.getURL());
                //Dialog.alert(request.getURL());
              UiApplication.getUiApplication().pushScreen(new AnotherScreen());
            }
        });
        browserField.requestContent("local:///index.html");
        add(browserField);
    }

 

 

三、IOS平台的处理方式:

采用UIWebViewDelegate.shouldStartLoadWithRequest

posted on 2012-12-11 19:40  TroyZ  阅读(1189)  评论(0编辑  收藏  举报