Weex Android SDK源码分析之Module(navigator)

Posted 王永迪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Weex Android SDK源码分析之Module(navigator)相关的知识,希望对你有一定的参考价值。

前言

之前已经介绍了module中的model,本篇博文介绍Weex Moudle中的navigator使用与源码分析。

代码分析

Weex封装了一系列的navigator api,例如:push, pop.

push

weex code

push(options, callback)

Arguments

    url(stirng): 界面Url路径.
    animated(string): 界面跳转动画.
    callback(object): 跳转成功回调.

Example

    var params = 
        'url': 'navigator-demo.js',
        'animated' : 'true',
    
    var navigator = require('@weex-module/navigator');
    navigator.push(params, function(e) 
        //callback
    );

android code

    private final static String TAG = "Navigator";
    private final static String WEEX = "com.taobao.android.intent.category.WEEX";
    private final static String URL = "url";

    @WXModuleAnno
    public void push(String param, final String callbackId) 
        if (WXSDKEngine.getActivityNavBarSetter() != null) 
            if (WXSDKEngine.getActivityNavBarSetter().push(param)) 
                WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS);
                return;
            
        

        try 
            JSONObject jsonObject = new JSONObject(param);
            String url = jsonObject.optString(URL, "");
            if (!TextUtils.isEmpty(url)) 
                Uri rawUri = Uri.parse(url);
                String scheme = rawUri.getScheme();
                Uri.Builder builder = rawUri.buildUpon();
                if (TextUtils.isEmpty(scheme)) 
                    builder.scheme("http");
                
                Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
                intent.addCategory(WEEX);
                intent.putExtra(WXNavigatorActivity.INSTANCE_ID, mWXSDKInstance.getInstanceId());
                mWXSDKInstance.getContext().startActivity(intent);
                WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS);
            
         catch (Exception e) 
            WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
            WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_FAILED);
        
    

1、检查是否定义IActivityNavBarSetter接口,如果有交由ActivityNavBarSetterImpl自身处理,否则执行默认跳转;

注意:
在使用push操作的Activity引入了“com.taobao.android.intent.category.WEEX”的 category,需要在mainfest的Activity中加上如下配置:

    <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="com.taobao.android.intent.category.WEEX"/>
            <data android:scheme="http"/>
            <data android:scheme="https"/>
            <data android:scheme="file"/>
    </intent-filter>

pop

weex code

Arguments

    animated(string): 关闭动画.
    callback(object): 回调.

Example
    var params = 
        'animated' : 'true',
    
    var navigator = require('@weex-module/navigator');
    navigator.pop(params, function(e) 
        //callback
    );

android code

    @WXModuleAnno
    public void pop(String param, final String callbackId) 
        if (WXSDKEngine.getActivityNavBarSetter() != null) 
            if (WXSDKEngine.getActivityNavBarSetter().pop(param)) 
                WXBridgeManager.getInstance().callback(mWXSDKInstance.getInstanceId(), callbackId, WXConst.MSG_SUCCESS);
                return;
            
        
        if (mWXSDKInstance.getContext() instanceof Activity) 
            ((Activity) mWXSDKInstance.getContext()).finish();
        
    

1、检查是否定义IActivityNavBarSetter接口,如果有交由ActivityNavBarSetterImpl自身处理,否则直接关闭;

以上是关于Weex Android SDK源码分析之Module(navigator)的主要内容,如果未能解决你的问题,请参考以下文章

Weex Android SDK源码分析之Module(modal)

Weex Android SDK源码分析之Module(webview)

Weex Android SDK源码分析之Module(animation)

Weex Android SDK源码分析之Module(animation)

Weex Android SDK源码分析之界面渲染(上)

Weex系列之Module源码解析