AlarmManagerの状況確認方法
目覚ましアプリを作ったけど、なぜかセットしていない時間にアラームが起動する。
しかも決まった時間に。
自分の端末だけかなと思ったら、他人の端末でも同じ事象が発生している。
なんとかしないと、ということでAlarmManagerの状況をダンプする方法を調べた。
adbのシェルコマンドを使えばいいらしい。
adb shell dumpsys alarm > dump.txt
下のような表示が約20個あった。パッケージ名(jp.co.kazusan85.alarm)があるからこれかな、と当たりをつけてみる。同じパッケージ名のものが8個あるぞ??
RTC_WAKEUP #21: Alarm{40906650 type 0 jp.co.kazusan85.alarm}
type=0 when=+23h41m58s982ms repeatInterval=86400000 count=1
operation=PendingIntent{408e83d8: PendingIntentRecord{408ea0e0 jp.co.kazusan85.alarm broadcastIntent}}
アラームONの状態の時とアラームOFFの状態のときを比べてみると、たしかに1個数が減っている。
でもアラームOFFにしても7個残ってる。なんで?
試しにアンインストールしてダンプしてみたら、7個残ってる!!
何なんだこれは!
この時点で、おそらくActivity実装時のロジックミスではなく、permission関連のバグなのかと思い始める。
そういえばBroadcastReceiver関連のpermissionをいじったなぁ。
こんな感じ。
<receiver android:name=".SampleBroadcast"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.DATE_CHANGED"/> <action android:name="android.intent.action.TIMEZONE_CHANGED"/> <action android:name="android.intent.action.TIME_SET"/> </intent-filter> </receiver>
BOOT_COMPLETED, DATE_CHANGED, TIMEZONE_CHANGED, TIME_SETを削除したら、ちゃんと1個だけセットされていました。
これで大丈夫かな。
BOOT_COMPLETEDが悪さをしているような気がする。