亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

phonegapios插件開發及無限后臺運行解決

2019-11-14 19:55:55
字體:
來源:轉載
供稿:網友

1.首先開發插件:因為我的項目前需要所以要做(根據情況)

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

   Demo,此時會產生出Demo.h和Demo.m兩個文件。

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

   .m文件是對h文件夾的實現,在插件執行時會進入相應的函數,切記:此函數要易執行長時的內容,此時uithread處于阻塞狀態。不用我們可以啟動一個線程在函數中,啟動線的的的函數如下:

Java代碼 復制代碼 收藏代碼
  1. NSThread *thread=[[NSThread alloc]initWithTarget:selft selector:@selector(doInBackground:)object:argumetns];  
  2. //doInBackground是在新得線程中要執行的方法  
  3. [thread start];  
NSThread *thread=[[NSThread alloc]initWithTarget:selft selector:@selector(doInBackground:)object:argumetns];//doInBackground是在新得線程中要執行的方法[thread start];

 

我這里簡單很一些code:

Java代碼 復制代碼 收藏代碼
  1. #import<Foundation/Foundation.h>  
  2. #import<Cordova/CDVPlugin.h>  
  3. @Interface DisplayNumber:CDVPlugin  
  4. -(void) setNumber:(CDVInvokeURLCommand) command;  
  5. @end;  
#import<Foundation/Foundation.h>#import<Cordova/CDVPlugin.h>@Interface DisplayNumber:CDVPlugin-(void) setNumber:(CDVInvokeURLCommand) command;@end;

 

 

2.在config.xml中啟用插件

  添加<feature name="Demo">

              <param name='ios-package'  value='Demo'/>

        </feature>

 這里說明一下:value值是我們前面定義的類名,面feature中的name指得是我們前面再寫js時,要調用的插件的名子,如果不明白,寫個寫成同一個名也行。(我就是這樣做的)

3 編輯寫插件js

  

Java代碼 復制代碼 收藏代碼
  1. var Demo=function(){  
  2.    
  3.   }  
  4.   Demo.PRototype={  
  5.   method:function(fun1,fun2,params){cordova.exec(fun1//成功時調用,fun2,'插件名','插件的方法名',[params//參數數組]);  
  6. }  
  7. }  
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代碼 復制代碼 收藏代碼
  1. #import <Cordova/CDVViewController.h>  
  2. #import <Cordova/CDVCommandDelegateImpl.h>  
  3. #import <Cordova/CDVCommandQueue.h>  
  4. #import <AVFoundation/AVFoundation.h>  
  5.   
  6. @interface MainViewController : CDVViewController{  
  7.     AVAudioPlayer *audioPlayer;  
  8. }  
  9. @property(nonatomic) AVAudioPlayer * audioPlayer;  
  10. @end  
  11.   
  12. @interface MainCommandDelegate : CDVCommandDelegateImpl  
  13. @end  
  14.   
  15. @interface MainCommandQueue : CDVCommandQueue  
  16. @end  
#import <Cordova/CDVViewController.h>#import <Cordova/CDVCommandDelegateImpl.h>#import <Cordova/CDVCommandQueue.h>#import <AVFoundation/AVFoundation.h>@interface MainViewController : CDVViewController{    AVAudioPlayer *audioPlayer;}@property(nonatomic) AVAudioPlayer * audioPlayer;@end@interface MainCommandDelegate : CDVCommandDelegateImpl@end@interface MainCommandQueue : CDVCommandQueue@end

 

 接著修改MainViewController.m文件,找到viewDidLoad方法,修改為:

Java代碼 復制代碼 收藏代碼
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view from its nib.  
  5.     dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
  6.     dispatch_async(dispatchQueue, ^(void) {  
  7.         NSError *audiosessionError = nil;  
  8.         AVAudioSession *audioSession = [AVAudioSession sharedInstance];  
  9.         if ([audioSession setCategory:AVAudioSessionCategoryPlayback error:&audioSessionError]){  
  10.             NSLog(@"Successfully set the audio session.");  
  11.         } else {  
  12.             NSLog(@"Could not set the audio session");  
  13.         }  
  14.           
  15.           
  16.         NSBundle *mainBundle = [NSBundle mainBundle];  
  17.         NSLog(@"%@",mainBundle);  
  18.         NSString *filePath = [mainBundle pathForResource:@"love" ofType:@"wav"];  
  19.         NSData *fileData = [NSData dataWithContentsOfFile:filePath];  
  20.         NSError *error = nil;  
  21.         NSLog(@"AA%@",filePath);  
  22.         self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileData error:&error];  
  23.           
  24.         if (self.audioPlayer != nil){  
  25.             self.audioPlayer.delegate = self;  
  26.               
  27.             [self.audioPlayer setNumberOfLoops:-1];  
  28.             if ([self.audioPlayer prepareToPlay] && [self.audioPlayer play]){  
  29.                 NSLog(@"Successfully started playing...");  
  30.             } else {  
  31.                 NSLog(@"Failed to play.");  
  32.             }  
  33.         } else {  
  34.             NSLog(@"Failed to play.");  
  35.         }  
  36.     });  
  37.    
  38. }  
- (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代碼 復制代碼 收藏代碼
  1. -(void) applicationDidEnterBackground:(UIApplication *)application{  
  2. //    [NSRunLoop currentRunLoop];  
  3. //      
  4. //    UIApplication *app=[UIApplication sharedApplication];  
  5. //    __block UIBackgroundTaskIdentifier bgTask;  
  6. //    bgTask=[app beginBackgroundTaskWithExpirationHandler:^{  
  7. //        dispatch_async(dispatch_get_main_queue(), ^{  
  8. //            if(bgTask!=UIBackgroundTaskInvalid){  
  9. //                bgTask=UIBackgroundTaskInvalid;  
  10. //            }  
  11. //        });  
  12. //    }];  
  13. //     
  14. //   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  15. //       dispatch_async(dispatch_get_main_queue(), ^{  
  16. //           if(bgTask!=UIBackgroundTaskInvalid){  
  17. //               bgTask=UIBackgroundTaskInvalid;  
  18. //           }  
  19. //       });  
  20. //   });  
  21. //      
  22. //    [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{  
  23. //        NSLog(@"KeepAlive");  
  24. //    }];  
  25.     MainViewController *mvc=[[MainViewController alloc] init];  
  26.     [mvc viewDidLoad];  
  27.   
  28. }  
-(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];}

 網上也有很多,發現在模擬器下可以長時間運行,但在真實機下并不能運行。發現還是長時間播放一個無聲的音頻文件好一點.

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成aaa人片在线观看蜜臀| 欧美多人乱p欧美4p久久| 亚洲成人av片在线观看| 日韩av在线免费观看一区| 久久视频国产精品免费视频在线| 欧美大片大片在线播放| 永久555www成人免费| 成人妇女淫片aaaa视频| 亚洲网站在线观看| 国产精品老牛影院在线观看| 久久久久久久久久婷婷| 91精品中文在线| 国产综合久久久久| 韩国三级电影久久久久久| 韩国三级电影久久久久久| 91深夜福利视频| 色综合久久精品亚洲国产| 亚洲福利视频在线| 日韩中文字幕久久| 亚洲第一页中文字幕| 久久久久久亚洲精品中文字幕| 亚洲福利视频久久| 久久夜色精品亚洲噜噜国产mv| 日韩在线中文视频| 亚洲午夜av电影| 91在线视频精品| 国产精欧美一区二区三区| 992tv成人免费影院| 成人午夜两性视频| 中文国产成人精品久久一| 国产一区二区三区精品久久久| 欧美另类69精品久久久久9999| 亚洲美女av电影| 亚洲成色www8888| 亚洲精品日产aⅴ| 欧美性xxxxhd| 精品久久久久久久久中文字幕| 亚洲欧美日韩在线高清直播| 成人h片在线播放免费网站| 亚洲自拍偷拍一区| 亚洲天堂男人的天堂| 亚洲欧美日韩中文在线| 久久成人免费视频| 成人有码视频在线播放| 91精品国产综合久久久久久蜜臀| 激情av一区二区| 亚洲无限乱码一二三四麻| 国产精品久久一区主播| 亚洲qvod图片区电影| 久久伊人91精品综合网站| 亚洲精品美女久久久| 国产成人一区二| 欧美日本黄视频| 日本中文字幕久久看| 久久成人18免费网站| 久久久久久久一区二区| 亚洲男人的天堂网站| 亚洲小视频在线| 久久精品电影网站| 国产精品久久中文| 欧美猛男性生活免费| 国产视频一区在线| 国产一区二区三区18| 欧美香蕉大胸在线视频观看| 国产精品视频1区| 欧美成人三级视频网站| 91精品中国老女人| 亚洲国产精品一区二区三区| 中文字幕日韩欧美精品在线观看| 夜夜嗨av色一区二区不卡| 欧美日韩国产色视频| 国产精品入口夜色视频大尺度| 欧美最猛黑人xxxx黑人猛叫黄| 欧美www视频在线观看| 亚洲曰本av电影| 亚洲欧美日本精品| 欧美日韩国产成人在线| 高清欧美性猛交xxxx| 九九热视频这里只有精品| 欧美美女操人视频| 久热精品视频在线观看一区| 精品视频在线播放免| 日韩一区二区在线视频| 亚洲第一精品久久忘忧草社区| 亚洲国产成人精品久久久国产成人一区| 成人午夜一级二级三级| 国产精品自拍偷拍视频| 欧美亚洲国产另类| 激情av一区二区| 国产日本欧美视频| 91中文字幕在线| 日韩欧美成人网| 国产亚洲综合久久| 亚洲精品乱码久久久久久按摩观| 国产精品稀缺呦系列在线| 国内免费精品永久在线视频| 国产精品主播视频| 日韩欧美一区二区三区久久| 亚洲精品aⅴ中文字幕乱码| 亚洲男人天堂2019| 成人av.网址在线网站| 91九色单男在线观看| 欧美大奶子在线| 日韩在线视频二区| 久久久久中文字幕| 亚洲精品网址在线观看| 欧美高清视频在线播放| 成人97在线观看视频| 成人免费网站在线| 欧美午夜www高清视频| 亚洲人成毛片在线播放| 亚洲影视中文字幕| 亚洲欧美国内爽妇网| 日韩美女中文字幕| 成人网在线免费看| 亚洲一区二区三区sesese| 欧美精品久久一区二区| 成人久久久久久久| 日韩激情片免费| 亚洲18私人小影院| 国产精品视频一| 久久影视电视剧免费网站清宫辞电视| 92国产精品视频| 国产91精品久久久久久| 亚洲美女性生活视频| 欧美高跟鞋交xxxxxhd| 91精品国产九九九久久久亚洲| 国产精品美女免费看| 欧美亚洲另类视频| 这里只有精品视频在线| 欧美日产国产成人免费图片| 国产精品中文在线| 亚洲欧美日韩天堂一区二区| 在线电影欧美日韩一区二区私密| 国产欧美日韩免费| 亚洲美女动态图120秒| 成人精品久久一区二区三区| 麻豆国产精品va在线观看不卡| 91超碰caoporn97人人| 久久免费高清视频| 日韩综合视频在线观看| 久久免费成人精品视频| 欧美黑人国产人伦爽爽爽| 亚洲国产精久久久久久久| 国产精品久久久久9999| 欧美一级淫片videoshd| 日韩精品999| 欧美一级在线播放| 亚洲欧美成人精品| 曰本色欧美视频在线| 伊人男人综合视频网| 日韩欧美国产视频| 国产免费一区二区三区在线观看| 青青久久av北条麻妃黑人| 久久久久久久久综合| 日韩av一区二区在线| 精品国产老师黑色丝袜高跟鞋| 国外成人在线视频| 日韩经典中文字幕| 国产成人精品视频在线观看| 欧美日本亚洲视频| 国产精品嫩草影院一区二区| 亚洲精品天天看| 国产精品九九久久久久久久|