2016-09-26 8 views
1

アプリケーションがバックグラウンドで動作しているか、実行していないと通知が3時間のために、私はiPhoneを振動させるようにしたい来て、連続または変更パターンを来るとき、アプリケーションが実行モードのときに、私は、コードを実行し、その時私はNSTimerを使用して通知し、以下のコードを振動のために使用しました。必要性3時間振動通知が振動</p> <p>の

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

しかし、アプリケーションがバックグラウンドで閉じられていてもアプリケーションが閉じていない場合は機能しません。

誰かご存知の方は、私にお勧めしてください。

答えて

0

NSTimerは、アプリがバックグラウンドで動作している間、バックグラウンドでは機能しません。そのため、アプリは振動しているデバイスのメソッドを呼び出すことはありません。

ここには、タイマーなしでデバイスを振動させるための代替動作の1つがあります。

//Call Your method like this 
    self.vibrateCount = 0; 
    [self vibrateDevice]; 

-(void)vibrateDevice{ 
    NSLog(@"Device Vibrate"); 
    AudioServicesPlaySystemSoundWithCompletion(kSystemSoundID_Vibrate, ^{ 
     AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate); 
    }); 
    self.vibrateCount++; 

    if (self.vibrateCount<3) { 
//  [self performSelector:@selector(vibrateDevice) withObject:nil afterDelay:1.0]; 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

      NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(vibrateDevice) userInfo:nil repeats:NO]; 

      [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 

      [[NSRunLoop currentRunLoop] run]; 
     }); 
    } 
} 

これは、バックグラウンドアプリモードで動作しますが、あなたはそれを呼び出すように注意してください、あなたが通知を得ながら(約10秒のみ)これを呼び出すためにのみ限られた時間を持っています。

これがうまくいきますように!

+1

お返事ありがとうございますが、アプリケーションがその時点で実行されていない場合は、このコードを使用しません。ユーザーが通知をクリックするまで天気予報が来るかどうかわからないアプリケーションもあります – Mahesh

+1

はい、私がこれを処理することはできませんが、今iOS 10ではMaOSHがこれを処理できません。 APNSの – CodeChanger