我正在使用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];
}];
}
这是否会进入我的应用程序,或者我是否需要为每个插件编辑它?我把它放在哪里?
我在网上看到了一些关于此的帖子,但没有一个明确回答如何使用上述代码。
答案 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