Phonegap" [' Media']插件应使用后台主题。"

时间:2014-07-04 10:23:07

标签: multithreading cordova plugins background media

我正在使用Phonegap 3和Media插件。我在iOS上测试我的应用时遇到了这些错误:

THREAD WARNING: ['Media'] took '205.391846' ms. Plugin should use a background thread.

我从phonegap文档(http://docs.phonegap.com/en/edge/guide_platforms_ios_plugin.md.html)中看到了这一点:

   - (void)myPluginMethod:(CDVInvokedUrlCommand*)command
{
    // Check command.arguments here.
    [self.commandDelegate runInBackground:^{
        NSString* payload = nil;
        // Some blocking logic...
        CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload];
        // The sendPluginResult method is thread-safe.
        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
    }];
}

这是否会进入我的应用程序,或者我是否需要为每个插件编辑它?我把它放在哪里?

我在网上看到了一些关于此的帖子,但没有一个明确回答如何使用上述代码。

2 个答案:

答案 0 :(得分:10)

就我个人而言,我还没有使用Media插件,但要处理后台线程,您需要检查哪个调用导致warning

例如,如果在创建media对象时抛出此警告:

var my_media = new Media(src, onSuccess, onError);

然后你可以查看插件.js文件(Media.js)。查找函数Media并查找本例调用,在这种情况下:

exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);

据此,您知道这是在调用Media班级的create方法。
所以请在这个确切的情况下打开Media.m(或CDVSound.m)并查找create方法(您应该在cordova/plugins/org.apache.cordova.media/src/ios中找到它),最后用整个方法封装整个方法:

[self.commandDelegate runInBackground:^{
    // the create method goes here
}]; 

这将为" native"创建一个后台线程。媒体创作。 它应该是这样的:

- (void)create:(CDVInvokedUrlCommand*)command
{
    [self.commandDelegate runInBackground:^{
        NSString* mediaId = [command.arguments objectAtIndex:0];
        NSString* resourcePath = [command.arguments objectAtIndex:1];

        CDVAudioFile* audioFile = [self audioFileForResource:resourcePath withId:mediaId doValidation:NO forRecording:NO];

        if (audioFile == nil) {
            NSString* errorMessage = [NSString stringWithFormat:@"Failed to initialize Media file with path %@", resourcePath];
            NSString* jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%@);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode:MEDIA_ERR_ABORTED message:errorMessage]];
            [self.commandDelegate evalJs:jsString];
        } else {
            CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
            [self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
        }
    }];
}

答案 1 :(得分:-4)

1.打开你的xCode项目。

2.单击设置选项卡2"功能"。

3.打开“背景模式”。

4.Chose"音频和Airplay"。

完成。现在你可以在后台播放音乐了。

PS:我使用xCode 6和Cordova 3.6.3