Make Healthy Life

最近はSQLばっかり書いてるWebエンジニアの日記です。

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が悪さをしているような気がする。