java后台使用%3ca%3e链接_phonegap ios插件开发及无限后台运行解决

1.首先开发插件:因为我的项目前需要所以要做(根据情况)

在项目的plugins文件中新建obj c文件。如

Demo,此时会产生出Demo.h和Demo.m两个文件。

.h文件主要就是定义一些方法,类似java中的接口.(要继承CDVPlugin)

.m文件是对h文件夹的实现,在插件执行时会进入相应的函数,切记:此函数要易执行长时的内容,此时uithread处于阻塞状态。不用我们可以启动一个线程在函数中,启动线的的的函数如下:

Java代码class="Apple-converted-space"> javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash">ways" />

3258d7cdd5cf369e33770723fdf551f3.png

NSThread *thread=[[NSThread alloc]initWithTarget:selft selector:@selector(doInBackground:)object:argumetns];

//doInBackground是在新得线程中要执行的方法

[thread start];

我这里简单很一些code:

Java代码Foundation%2FFoundation.h%3E%0A%23import%3CCordova%2FCDVPlugin.h%3E%0A%40Interface%20DisplayNumber%3ACDVPlugin%0A-(void)%20setNumber%3A(CDVInvokeURLCommand)%20command%3B%0A%40end%3B" />

3258d7cdd5cf369e33770723fdf551f3.png

#import

#import

@Interface DisplayNumber:CDVPlugin

-(void) setNumber:(CDVInvokeURLCommand) command;

@end;

2.在config.xml中启用插件

添加

这里说明一下:value值是我们前面定义的类名,面feature中的name指得是我们前面再写js时,要调用的插件的名子,如果不明白,写个写成同一个名也行。(我就是这样做的)

3 编辑写插件js

Java代码function()%7B%0A%20%0A%20%20%7D%0A%20%20Demo.prototype%3D%7B%0A%20%20method%3Afunction(fun1%2Cfun2%2Cparams)%7Bcordova.exec(fun1%2F%2F%E6%88%90%E5%8A%9F%E6%97%B6%E8%B0%83%E7%94%A8%2Cfun2%2C'%E6%8F%92%E4%BB%B6%E5%90%8D'%2C'%E6%8F%92%E4%BB%B6%E7%9A%84%E6%96%B9%E6%B3%95%E5%90%8D'%2C%5Bparams%2F%2F%E5%8F%82%E6%95%B0%E6%95%B0%E7%BB%84%5D)%3B%0A%7D%0A%7D" />

3258d7cdd5cf369e33770723fdf551f3.png

var Demo=function(){

}

Demo.prototype={

method:function(fun1,fun2,params){cordova.exec(fun1//成功时调用,fun2,'插件名','插件的方法名',[params//参数数组]);

}

}

若我们想使用Demo插件,简单的可以写成new Demo().method(fun1,fun2,params);//很简单

说明一下:我们也可以在插件的js里的new Demo()给一个变量,我们再调用时就不用再new 一个。

关于后台无限运行的解决(网上也有很多解决方案)

1. Info.plist文件中新增:Required Background modes (是一个数组形式的建值),在item0后的value设置成为 App plays audio or streams audio/video using AirPlay。

2.在Classes文件夹下找到MainViewController.h,

Java代码3258d7cdd5cf369e33770723fdf551f3.png

#import 

#import 

#import 

#import 

@interface MainViewController : CDVViewController{

AVAudioPlayer *audioPlayer;

}

@property(nonatomic) AVAudioPlayer * audioPlayer;

@end

@interface MainCommandDelegate : CDVCommandDelegateImpl

@end

@interface MainCommandQueue : CDVCommandQueue

@end

接着修改MainViewController.m文件,找到viewDidLoad方法,修改为:

Java代码3258d7cdd5cf369e33770723fdf551f3.png

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.

dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(dispatchQueue, ^(void) {

NSError *audioSessionError = nil;

AVAudioSession *audioSession = [AVAudioSession sharedInstance];

if ([audioSession setCategory:AVAudioSessionCategoryPlayback error:&audioSessionError]){

NSLog(@"Successfully set the audio session.");

} else {

NSLog(@"Could not set the audio session");

}

NSBundle *mainBundle = [NSBundle mainBundle];

NSLog(@"%@",mainBundle);

NSString *filePath = [mainBundle pathForResource:@"love" ofType:@"wav"];

NSData *fileData = [NSData dataWithContentsOfFile:filePath];

NSError *error = nil;

NSLog(@"AA%@",filePath);

self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileData error:&error];

if (self.audioPlayer != nil){

self.audioPlayer.delegate = self;

[self.audioPlayer setNumberOfLoops:-1];

if ([self.audioPlayer prepareToPlay] && [self.audioPlayer play]){

NSLog(@"Successfully started playing...");

} else {

NSLog(@"Failed to play.");

}

} else {

NSLog(@"Failed to play.");

}

});

}

说明:love.wav文件是other Sources下的文件。

接着修改AppDelegate.m文件,新增方法:

Java代码3258d7cdd5cf369e33770723fdf551f3.png

-(void) applicationDidEnterBackground:(UIApplication *)application{

//    [NSRunLoop currentRunLoop];

//

//    UIApplication *app=[UIApplication sharedApplication];

//    __block UIBackgroundTaskIdentifier bgTask;

//    bgTask=[app beginBackgroundTaskWithExpirationHandler:^{

//        dispatch_async(dispatch_get_main_queue(), ^{

//            if(bgTask!=UIBackgroundTaskInvalid){

//                bgTask=UIBackgroundTaskInvalid;

//            }

//        });

//    }];

//

//   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

//       dispatch_async(dispatch_get_main_queue(), ^{

//           if(bgTask!=UIBackgroundTaskInvalid){

//               bgTask=UIBackgroundTaskInvalid;

//           }

//       });

//   });

//

//    [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{

//        NSLog(@"KeepAlive");

//    }];

MainViewController *mvc=[[MainViewController alloc] init];

[mvc viewDidLoad];

}

网上也有很多,发现在模拟器下可以长时间运行,但在真实机下并不能运行。发现还是长时间播放一个无声的音频文件好一点.

-------------------如果有什么不好的地方,请指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值