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秒のみ)これを呼び出すためにのみ限られた時間を持っています。
これがうまくいきますように!
お返事ありがとうございますが、アプリケーションがその時点で実行されていない場合は、このコードを使用しません。ユーザーが通知をクリックするまで天気予報が来るかどうかわからないアプリケーションもあります – Mahesh
はい、私がこれを処理することはできませんが、今iOS 10ではMaOSHがこれを処理できません。 APNSの – CodeChanger