Phonegap-检测网络活动

Phonegap - Detecting network activity

本文关键字:活动 网络 检测 Phonegap-      更新时间:2023-09-26

场景

我制作了一个phonegap 1.0.0应用程序,通过谷歌地图加载当前位置。我还创建了一个插件,在屏幕顶部显示活动指示器,即在iPhone的状态栏上。

function onBodyLoad()
{   
    document.addEventListener("deviceready",onDeviceReady,false);
};
function onDeviceReady()
{
    //Get the plugin object
    var ai = window.plugins.ActivityIndicator;
    //Stop the spin, if any activity was going on earlier
    ai.end();
    if(navigator.geolocation) {
        //Start spinning, indicating that some network activity is going on
        ai.set();
        navigator.geolocation.getCurrentPosition(initSearch);
    }
    else alert("Please try reloading");
    //Stop spinning after 10 seconds
    window.setTimeout(ai.end, 10000);
};

插件的Javascript代码如下:

var ActivityIndicator = function() {};
ActivityIndicator.prototype.set = function() 
{
    PhoneGap.exec("ActivityIndicator.start");
};
ActivityIndicator.prototype.end = function() 
{
    PhoneGap.exec("ActivityIndicator.end");
};
ActivityIndicator.install = function() {
    if(!window.plugins)
        window.plugins = {};
    window.plugins.ActivityIndicator = new ActivityIndicator();
    return window.plugins.ActivityIndicator;
};
PhoneGap.addConstructor(ActivityIndicator.install);

插件的Objective-C代码如下:

#import <Foundation/Foundation.h>
#ifdef PHONEGAP_FRAMEWORK
#import <PhoneGap/PGPlugin.h>
#else
#import "PGPlugin.h"
#endif
@interface ActivityIndicator : PGPlugin {}
-(void) start:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
-(void) end:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
@implementation ActivityIndicator
- (void)start:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options
{
    UIApplication* app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible = YES;
}
- (void)end:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options
{
    UIApplication* app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible = NO;
}
@end

问题

正如您在上面的代码片段中所看到的,我已经将旋转的Timeout设置为在10秒后停止。

问题

如何在有任何网络活动时启动/停止activityIndicator?

你本可以使用notificationEx而不是自己做,但这对知识有好处:(

无论如何,地图调用是基于ajax的吗?如果是,并且您正在使用jQuery,则分配.ajaxStart().ajaxStop()函数。

我做以下事情:

function onDeviceReady() {
    /* ===============
    // Bind Ajax calls with
    // activity Indicator
    // =============== */
    $(document).ajaxStart(function() {
        navigator.notificationEx.activityStart();
    }).ajaxStop(function() {
        navigator.notificationEx.activityStop();
    });
//other stuff
}

这样,当活动发生时,所有ajax都将显示在活动中。

更新:对于版本0.8上的Zeptojs或仅在版本0.8上实现的高级ajax全局,请使用以下命令:

function onDeviceReady() {
    /* ===============
    // Bind Ajax calls with
    // activity Indicator - ZEPTO
    // =============== */
    $(document).on('ajaxStart',function() {
        navigator.notificationEx.activityStart();
    }).on('ajaxStop',function() {
        navigator.notificationEx.activityStop();
    });
//other stuff
}