DX・デジタルトランスフォーメーション

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版

ブロックチェーン・暗号技術 | android | iOS | Web | アプリの著作権 | 日本のなりたち | 禅・大乗仏教 | 新しい社会

iOSとandroidにおけるAlarmの実装方法の違い

アラーム(警報)という仕組みは、目覚し時計に代表されるように、何としても相手に気づかせたい場合に用いられるものだ。

スマホアプリでアラームを使うときも、鳴ったり鳴らなかったりでは困るわけで、必ず所定の時間になったら警報を発令してほしいのだ。

iOS

iOSではアラームはローカル通知という仕組みを使って実装する。

UIApplication#scheduleLocalNotification を呼べば毎日同じ時間にアラームを鳴らすことができる。

アラームを繰り返しリピートすることもできる。

UIApplicationDelegate#didReceiveLocalNotification でローカル通知を受信する。

iOSではアプリが起動中にローカル通知を受信しても通知表示されないので、アプリでUIViewController#presentViewController でViewを表示したりサウンドを鳴らす必要がある。

android

androidではSDKバージョンによってメソッドが異なる。

いづれも、アプリが起動していてもしていなくても通知表示をしてくれる。

・SDK 23以上

AlarmManager#setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP

・SDK 19以上

AlarmManager#setExact(AlarmManager.RTC_WAKEUP

↑このメソッドでは android6以上ではスタンバイ状態でアラームが鳴らない。

・SDK 18以下

AlarmManager#set(AlarmManager.RTC_WAKEUP


適切なメッソドを使用しないと、スタンバイ状態でアラームが鳴らなかったりする。

また、androidではiOSとは異なることが3つある。

1) 次の事象が発生するとアラームが自動キャンセルされる。

・アプリが異常終了した

・端末が再起動した

2) アラームのキャンセルが ID指定できない。

iOSでは、UIApplication#cancelLocalNotification によって任意のラベル文字列を指定して該当するローカル通知をキャンセルできる。

androidでは、アラームを作成したときと同じPendingIntentを作成して AlarmManager#cancelに渡す必要がある。

3) 繰り返しリピート設定ができない。

SDK上はリピートするメソッドが用意されているが、これを使うと平気で数分遅れてアラームが鳴ってしまうので、実質的には使用できない。

そのため、アラームを受信したら翌日のアラームを再設定するという実装が必要になる。

androidのフレームワークには不備が多いが、これも最たるものだ。

アラームを受信するには次のようにレシーバを定義して BroadcastReceiver#onReceive で受信する必要がある。


    
        
        
    

androidには Applicationクラスが存在し継承もできるが、アプリのステータス管理程度しかできない。

iOSの UIApplicationDelegate のようなアプリ全体をみれるような仕組みがないのである。

そのため、アラームを受信するのでさえアプリごとに別プロセスとしてレシーバをメモリ常駐させなければ実現できない。

内部メモリがiOSの4倍も必要になるのもうなづける。

2023年12月
     12
3456789
10111213141516
17181920212223
24252627282930
31      
android
iOS
web
アプリの著作権
ブロックチェーン/暗号技術
新しい社会
禅・大乗仏教
日本のなりたち

AppStoreにて無料公開中! ”システム手帳”で検索! - AppStoreへ iPad版 - iPhone版
デジタルトランスフォーメーションで新しい生活を提案!