您的位置:首页 > 移动开发 > Android开发

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

2016-06-18 16:49 375 查看

前言

之前已经介绍了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自身处理,否则直接关闭;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: