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自身处理,否则直接关闭;

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android应用中使用百度地图导航SDK添加途径点,您需要按照以下步骤进行操作: 1. 在您的Android项目中,添加百度地图导航SDK的依赖。您可以在项目的build.gradle文件中添加以下代码: ```groovy dependencies { implementation 'com.baidu.mapapi:navisdk:5.1.0' } ``` 2. 在您的布局文件中添加一个地图视图。您可以使用MapView控件来显示地图。例如,在XML布局文件中添加以下代码: ```xml <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在您的Activity或Fragment中,初始化地图和导航功能。您可以在onCreate方法中添加以下代码: ```java // 初始化地图 MapView mMapView = findViewById(R.id.bmapView); BaiduMap mBaiduMap = mMapView.getMap(); // 初始化导航功能 BNRoutePlanNode sNode = new BNRoutePlanNode.Builder() .name("起点") .latitude(startLat) .longitude(startLng) .build(); BNRoutePlanNode eNode = new BNRoutePlanNode.Builder() .name("终点") .latitude(endLat) .longitude(endLng) .build(); BNRoutePlanNode[] nodes = new BNRoutePlanNode[]{sNode, eNode}; // 设置途径点 BNRoutePlanNode viaNode = new BNRoutePlanNode.Builder() .name("途径点") .latitude(viaLat) .longitude(viaLng) .build(); List<BNRoutePlanNode> throughNodes = new ArrayList<>(); throughNodes.add(viaNode); // 创建导航实例 BNRoutePlanNode startNode = nodes[0]; BNRoutePlanNode endNode = nodes[1]; BaiduNaviManager.getInstance().init(this, null, null, new BaiduNaviManager.NaviInitListener() { @Override public void onAuthResult(int i, String s) { // 初始化结果处理 } @Override public void initSuccess() { // 初始化成功处理 // 开始导航 BaiduNaviManager.getInstance().launchNavigator( YourActivity.this, startNode, endNode, throughNodes, BaiduNaviManager.RoutePlanPreference.ROUTE_PLAN_MOD_RECOMMEND, true, new BaiduNaviManager.RoutePlanListener() { @Override public void onJumpToNavigator(Bundle bundle) { // 开始导航回调 Intent intent = new Intent(YourActivity.this, YourNavigatorActivity.class); intent.putExtras(bundle); startActivity(intent); } @Override public void onRoutePlanFailed() { // 导航失败处理 } }); } @Override public void initStart() { // 初始化开始处理 } @Override public void initFailed() { // 初始化失败处理 } }); ``` 在上述代码中,您需要替换`startLat`、`startLng`、`endLat`、`endLng`、`viaLat`和`viaLng`为实际的起点、终点和途径点的经纬度。 4. 创建一个新的Activity(例如`YourNavigatorActivity`)来显示导航界面。您可以在该Activity的onCreate方法中添加以下代码: ```java // 获取导航视图 BaiduNaviManager.getInstance().init(YourNavigatorActivity.this, null, null, new BaiduNaviManager.NaviInitListener() { @Override public void onAuthResult(int i, String s) { // 初始化结果处理 } @Override public void initSuccess() { // 初始化成功处理 // 创建导航视图 View navigatorView = BNavigator.getInstance().init( YourNavigatorActivity.this, getIntent().getExtras(), YourNavigatorActivity.class); if (navigatorView != null) { setContentView(navigatorView); } } @Override public void initStart() { // 初始化开始处理 } @Override public void initFailed() { // 初始化失败处理 } }); ``` 这样,您就可以在您的Android应用中使用百度地图导航SDK并添加途径点了。请注意,使用该SDK需要您在百度开发者平台上注册并获取相应的API密钥,并将其配置到您的项目中。此外,还需要权限申请和处理其他相关逻辑,具体可参考百度地图导航SDK的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值