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)