【问题标题】:phonegap, iphone and the big bad idleTimerDisabledphonegap、iphone 和大坏蛋 isidleTimerDisabled
【发布时间】:2011-04-28 19:42:37
【问题描述】:

阅读了很多关于如何防止 iphone 在运行我的应用程序时进入睡眠状态的信息,我现在非常不高兴,因为没有任何效果..

here 我读到了关于每 30 秒设置一个计时器以将 idleTimerDisabled 设置为 NO 然后是 YES 的想法,但我的 objC 还不是那么好。谁能告诉我如何(以及在​​哪里)?

谢谢!

编辑: 这是我尝试过的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{   
    [ super applicationDidFinishLaunching:application ];
    //application.idleTimerDisabled = NO;
    //application.idleTimerDisabled = YES;
    //[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
    [UIApplication sharedApplication].idleTimerDisabled = NO;
    [UIApplication sharedApplication].idleTimerDisabled = YES;


}

edit2:之后我尝试使用以下命令开始循环:

-(void)_timerLoop
{
    // add this function up the top.  it's what will happen when the
    // timer goes off:
    NSLog(@"Your timer went off!!!");
}


/**
 * This is main kick off after the app inits, the views and Settings are setup here.
 */
- (void)applicationDidFinishLaunching:(UIApplication *)application
{   
    [ super applicationDidFinishLaunching:application ];
    //application.idleTimerDisabled = NO;
    //application.idleTimerDisabled = YES;
    //[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
    //[UIApplication sharedApplication].idleTimerDisabled = NO;
    //[UIApplication sharedApplication].idleTimerDisabled = YES;
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(_timerLoop) userInfo:nil repeats:YES];


}

edit3:你真的不能随意改变投票吗?将是对 stackoverflow 系统的一个很好的更改请求!

【问题讨论】:

  • 为什么我的问题被降级了?
  • @JoeBlow:谢谢!很高兴知道。刚刚按照您的要求编辑了问题。

标签: iphone cordova idle-timer


【解决方案1】:

关于关于使用计时器的问题

以下是您如何在 30 秒后让计时器停止(仅一次):

-(void)_jump
{
// add this function up the top.  it's what will happen when the
// timer goes off:
NSLog(@"Your timer went off!!!");
}
...
// here's how to create the timer, which will go off in 30 seconds
[NSTimer scheduledTimerWithTimeInterval:30.0
   target:self selector:@selector(_jump) userInfo:nil repeats:NO]

如果您想要两个不同的计时器,在 30 秒和 60 秒之后,只需以相同的方式制作两个即可。如果您在计时器方面需要更多帮助,请告诉我!


再简单不过了。只需添加这一行:

application.idleTimerDisabled = YES;

在您的“应用程序 didFinishLaunchingWithOptions”例程中。

您会在 app delegate .m 源代码文件中找到该例程。

请务必在 BEFORE“返回 YES;”之前添加它声明 - 一个常见的错误!所以,就像这样:

-(BOOL)application:(UIApplication *)application
            didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    // blah blah ...

    application.idleTimerDisabled = YES;
    return YES;
    }

【讨论】:

  • AppDelegate.m 中没有返回 YES。这是一个(无效)方法:- (void)applicationDidFinishLaunching:(UIApplication *)application { [ super applicationDidFinishLaunching:application ]; //application.idleTimerDisabled = NO; //application.idleTimerDisabled = YES; //[[UIApplication sharedApplication] setIdleTimerDisabled:YES]; [UIApplication sharedApplication].idleTimerDisabled = NO; [UIApplication sharedApplication].idleTimerDisabled = YES; }
  • @Joe Blow 嘿,感谢您的帮助!我只使用 phonegap 并在 appDelegate.m 中添加了 application.idleTimerDisabled = YES;停止 ideTimer。但它没有用。如果我做错了,phonegap 的人也做错了。 ;-) 那么这是错的吗?
  • @Joe 已编辑...为什么 phonegap 这么糟糕?
  • @Joethanx 尝试,但计时器不起作用。 (见编辑)
  • hm,在'-(id)init'中它正在工作。但是什么时候会调用'- (void)applicationDidFinishLaunching'?
【解决方案2】:

只需设置 [UIApplication sharedApplication].idleTimerDisabled = YES;在

  • (BOOL) 应用程序:(UIApplication*)应用程序 didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

对我来说效果很好。但是,有一个警告。我注意到,每次我从 phonegap 应用程序调用相机实用程序来拍摄快照时,idleTimerDisable 都会在幕后设置为 NO。所以在我上传图片后,我再次调用了以下代码行:

[UIApplication sharedApplication].idleTimerDisabled = YES;

此外,如果整个应用程序空闲计时器有更多地方重新启用,我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多