`
zhaole609
  • 浏览: 342665 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

phonegap ios插件开发及无限后台运行解决

阅读更多

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

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

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

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

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

NSThread *thread=[[NSThread alloc]initWithTarget:selft selector:@selector(doInBackground:)object:argumetns];
//doInBackground是在新得线程中要执行的方法
[thread start];

 

我这里简单很一些code:

#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

  

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,

 

#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方法,修改为:

- (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文件,新增方法:

-(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];

}

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

 

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

分享到:
评论

相关推荐

    phonegap开发插件合集

    这个"phonegap开发插件合集"是一个包含了多种PhoneGap插件的资源包,覆盖了Android和iOS等多个平台,为开发者提供更丰富的功能扩展。 首先,我们来看看"短信收发插件"。在移动应用中,发送和接收短信是一项常见的...

    phoneGAP2.9.1.zip

    - **跨平台开发**:PhoneGap简化了开发流程,开发者只需要编写一次代码,就可以在多个平台上运行,减少了开发成本和时间。 - **熟悉的开发环境**:对于熟悉Web开发的程序员来说,PhoneGap使用HTML、CSS和...

    phonegap local-notifications插件应用实例含(android、ios、windows)

    在PhoneGap应用中,`cordova-plugin-local-notifications`是一个非常重要的插件,它使得开发者能够实现本地通知功能,这些通知可以在用户不直接与应用交互时触发,比如当应用在后台运行或者被关闭时。本实例将详细...

    phoneGap开发包

    2. **安装与配置**:在2.3.0版本中,开发者需要下载并安装Adobe PhoneGap Build或使用命令行工具来配置开发环境,包括安装Java Development Kit (JDK)、Apache Ant、Android SDK或iOS SDK等,根据目标平台进行相应的...

    phoneGap极光推送插件。

    PhoneGap与极光推送插件是移动应用开发中的两个重要工具。PhoneGap是一个开源框架,它允许开发者使用HTML、CSS和JavaScript来构建跨平台的原生移动应用。它通过Apache Cordova将这些Web技术转化为可以在iOS、Android...

    html5IOS开发

    一、HTML5的主要特性及在iOS开发中的应用 1. 存储:HTML5引入了离线存储(localStorage和sessionStorage),使应用程序能够在用户设备上保存数据,即使在网络不可用的情况下也能访问。这对于iOS应用来说,可以实现...

    html5+phonegap跨平台移动应用开发

    HTML5+PhoneGap跨平台移动应用开发是一种现代的、高效的方法,它允许开发者使用Web技术(如HTML、CSS和JavaScript)构建可以在多个操作系统上运行的应用程序,包括Android、iOS、Windows Phone等。PhoneGap是Adobe ...

    android phonegap震动,声音,Dialog

    2 进入到phonegap工程下的plugins 文件夹当中 ,使用命令行下载官方插件 ;(输入命令: cordova plugin add org.apache.cordova.vibration) 4 添加生成 android或者IOS 工程 ;android命令如下cordova platform add ...

    phonegap与js进行交互

    开发自定义插件可以让开发者访问PhoneGap未直接支持的设备特性或服务。创建插件通常涉及以下步骤: 1. **定义接口**:在JavaScript中定义插件的API,包括暴露给JavaScript的方法。 2. **实现原生代码**:在每个目标...

    phonegap推送

    通过集成推送服务,开发者能够向用户的设备发送消息,即使应用在后台运行或完全关闭,用户也能接收到这些消息。 PhoneGap推送服务通常依赖于第三方服务,如Google Firebase Cloud Messaging (FCM) 或Apple Push ...

    Phonegap Beginner’s Guide源码

    了解PhoneGap应用的生命周期至关重要,包括`deviceready`事件、页面加载和卸载、后台运行等状态。掌握这些可以帮助我们更好地管理应用的状态,确保在不同场景下正确响应。 8. **调试与测试** 虽然PhoneGap应用...

    jpush-phonegap-plugin

    3. **兼容性改进**:适应不同平台(如iOS和Android)的更新,确保在新版本操作系统上正常运行。 4. **性能优化**:可能对推送接收速度或电池使用进行了优化。 在实际开发中,开发者需要阅读插件的文档,了解如何...

    HTML5移动开发—面向iOS和Android平台(最新高清完整版)

    HTML5移动开发是现代Web应用领域的一个重要方向,尤其针对iOS和Android这两个主流移动操作系统。随着互联网技术的不断发展,HTML5已经成为构建响应式、交互性强的网页应用的基础,它不仅适用于桌面端,更是移动端...

    phonegap-1.2.0

    PhoneGap的核心理念是通过WebView(在iOS上是UIWebView,在Android上是WebView)将Web应用包装成一个原生应用,这样Web应用就可以在移动设备上运行,同时能够与设备硬件进行交互。PhoneGap提供了API接口,使得...

    自定义plugin插件,实现javascript与Android的交互

    - 考虑到跨平台兼容性,确保你的插件在iOS或其他支持的平台上也能正常工作。 总的来说,自定义PhoneGap插件是扩展应用功能、充分利用Android原生能力的关键途径。通过理解其工作原理和遵循最佳实践,开发者可以...

    Cordova 4.2.0插件应用及开发

    本篇文章将深入探讨Cordova 4.2.0版本中的插件应用与开发,特别是如何获取手机信息、检查手机网络连接状态、实现弹出插件、创建自定义土司插件以及设置app自动升级。 首先,获取手机信息是移动应用中常见的需求。在...

    phonegap集成Keymob广告管理库

    2. **安装插件**:使用PhoneGap CLI或Cordova CLI命令行工具安装KeyMob插件,确保插件正确添加到项目配置文件中(config.xml)。 3. **初始化KeyMob**:在应用的启动代码中调用KeyMob的初始化方法,传入应用的ID和...

    opath(仿path的phonegap应用)

    - **Cordova插件**:PhoneGap基于Cordova,开发者可以使用社区提供的各种插件扩展应用功能。 **3. Xcode项目** `opath.xcodeproj`是iOS平台的开发项目文件,使用Apple的Xcode IDE进行编辑和编译。在Xcode中,可以...

    Phonegap-app-test:phonegap 游戏演示

    1. **跨平台开发**:PhoneGap 的一大优势是跨平台性,它可以构建运行在 iOS、Android、Windows Phone 等多个操作系统上的应用,只需要一套代码。 2. **WebView**:PhoneGap 应用在每个平台上都是一个 WebView,这是...

Global site tag (gtag.js) - Google Analytics