Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的PhoneGap:我在HTML和-&燃气轮机;JS<-&燃气轮机;插件<-&燃气轮机;活动_Android_Android Activity_Cordova_Mapactivity_Phonegap Plugins - Fatal编程技术网

Android上的PhoneGap:我在HTML和-&燃气轮机;JS<-&燃气轮机;插件<-&燃气轮机;活动

Android上的PhoneGap:我在HTML和-&燃气轮机;JS<-&燃气轮机;插件<-&燃气轮机;活动,android,android-activity,cordova,mapactivity,phonegap-plugins,Android,Android Activity,Cordova,Mapactivity,Phonegap Plugins,我有个问题。。。(真的吗?:-)) 我想做什么? 我需要制作一个本地插件来启动MapActivity(显示POI、显示行程等),当mapView在某些条件下关闭时,我必须加载一个特定的html页面 因此: .HTML页面,其中包含JS事件->.JS插件->.Java插件-(启动)->.Java映射活动 当我的MapActivity完成时: MapActivity发送[Status.ok]或[message]X->.Java插件->.JS回调->加载新页面 有什么问题吗? 但不幸的是,我有这样的流

我有个问题。。。(真的吗?:-))

我想做什么?

我需要制作一个本地插件来启动MapActivity(显示POI、显示行程等),当mapView在某些条件下关闭时,我必须加载一个特定的html页面

因此:

.HTML页面,其中包含JS事件->.JS插件->.Java插件-(启动)->.Java映射活动

当我的MapActivity完成时:

MapActivity发送[Status.ok]或[message]X->.Java插件->.JS回调->加载新页面

有什么问题吗?

但不幸的是,我有这样的流程:

->.java插件执行:{启动(MapActivity);返回响应}

然后我的mapactivity启动了,但是我的回调已经在没有任何数据的情况下传递了

另一个问题:PhoneGap似乎要取消onActivityResult(),无法在MapViewPlugin.java中获取回调数据

代码?

mapview.js-插件

在启动MapActivity之前调用的回调出现问题。 sleep(2000)是在地图视图显示后显示新页面的一种变通方法。但这不是一个好问题

MapView.prototype.showItineraryMapView = function(itineraryEncoded, startLat,
        startLong, startTitle, startDesc, finishLat, finishLong, finishTitle,
        finishDesc, callBack) {
    PhoneGap.exec(function() {
        sleep(2000);
        callBack();
    }, function(){} , "MapView", "show_itinerary", [ itineraryEncoded, startLat, startLong,
            startTitle, startDesc, finishLat, finishLong, finishTitle,
            finishDesc ]);
};

function sleep(ms) {
    var dt = new Date();
    dt.setTime(dt.getTime() + ms);
    while (new Date().getTime() < dt.getTime());
}
我不知道这是否是一个好的解决方案,我可能是在错误的方式。有人能帮我吗

这是我的第一个stackoverflow问题,所以如果你想要更精确或者我不够精确,请问我更多细节


谢谢你

这不太对。这里有一些变化,应该让你摆脱困境。首先,您需要保存传入execute的callbackId。然后在您的execute方法中调用showtineraymappview(),但不要让它返回PluginResult,让它返回void

在调用ShowInventureMapView()后,立即执行以下操作:

然后,在ShowCineraryMapView()中,您希望调用ctx.startActivityForResult()而不是ctx.startActivity(),并在之后立即删除返回新PluginResult的行

然后,您需要超越onActivityResult()方法。这是从MapView获取信息的地方。然后你打电话:

this.success(new PluginResult(PluginResult.Status.OK, myData), this.callbackId);

其中,“myData”是您希望传递回JavaScript端的信息,“this.callbackId”是您存储在execute方法中的回调ID。

感谢您的响应!精确一点:如果intent是由ctx.startActivityForResult(intent-intent,int-requestCode)启动的,则不会调用onActivityResult,但是如果使用:ctx.startActivityForResult(IPlugin命令,intent-intent,int-requestCode),则会调用onActivityResult,这很好!非常感谢!回答得很好,希望我能在翻阅phonegap源代码之前看到这篇文章!
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
r.setKeepCallback(true);
return r;
this.success(new PluginResult(PluginResult.Status.OK, myData), this.callbackId);