質問編集履歴
3
編集前「関係ない時間に鳴ることがある」と書いていましたが、スマホにある操作をするとalarmTimeに不適切な値が渡されるためとわかり解決しましたので、その部分の記述を削除しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,8 +6,11 @@
|
|
6
6
|
setAlarmClockを使い、時間になると「StopSnooze」というActivityが立ち上がって音を鳴らすという作りですが、正確な時間に鳴らないので困っています。
|
7
7
|
|
8
8
|
### 発生している問題・エラーメッセージ
|
9
|
-
2~9分程度遅れて鳴ることが多く
|
9
|
+
2~9分程度遅れて鳴ることが多くあります。数分後に鳴るようなセットをするとほぼ正確に鳴りますが、8時間後に鳴るなどのセットをすると、遅れるなどの問題が起きることが多いです。
|
10
10
|
インストールして最初の2,3回はほぼ正確に鳴り、数日後(数回の使用後)に不正確になるように思われます。
|
11
|
+
|
12
|
+
### お願いしたいこと
|
13
|
+
解決方法がわかればもちろん良いですが、それ以外でも、最近setAlarmClockを使ってうまくいった、あるいはうまくいかなかった経験がある方などに、そのことを教えていただけるだけでもありがたいです。というのも、そもそも今のAndroidにおいてsetAlarmClockを使って正確な時間に鳴る目覚まし時計を作ることはできないのではないか?無理なことをしようとしているのではないか?と疑問が湧いているのです。
|
11
14
|
|
12
15
|
### 該当のソースコード
|
13
16
|
メインアクティビティでアラームを鳴らす時刻(alarmTime)を取得してからサービスを立ち上げます。スマホがスリープ中にアラーム時刻となった場合にアクティビティの画面が立ち上がり、さらにPINの入力をせずに音を止められすようにするなどのために、Manifestにいくつかのpermissionを記述しています。
|
2
adb shell dumpsys deviceidle を使って確かめた内容を追記した。
test
CHANGED
File without changes
|
test
CHANGED
@@ -82,6 +82,16 @@
|
|
82
82
|
・Clean Projectを実施した。
|
83
83
|
・スマホの設定から、省電力機能の電池の最適化の対象外とした。
|
84
84
|
|
85
|
+
約4分間アラームが鳴るのが遅れた際に、adb shell dumpsys deviceidle を使ってその時のアラームの状態を調べてみました(Pixel5a(5G)を使用)。すると、
|
86
|
+
deep-idle: -2h12m52s503ms
|
87
|
+
normal: -20m40s929ms (alarm)
|
88
|
+
light-idle: -18m40s7ms
|
89
|
+
light-maint: -12m38s985ms
|
90
|
+
light-idle: -12m33s911ms
|
91
|
+
normal: -7m51s496ms (unlocked)
|
92
|
+
のような表記が出ました。アラームを設定したのはこの時間に合わせると -12m頃です。すなわち、-20m40sの時点でスマホは起きたにも関わらず、-12mの時点でアラームは鳴らず、-7m51s頃の時点でようやく鳴ったということと思われます。
|
93
|
+
これはなぜなのでしょうか。コードを工夫することによって改善する可能性はあるのでしょうか。
|
94
|
+
|
85
95
|
### 補足情報
|
86
96
|
これらの問題は、実機3台(Pixel5a(5G):Android12、Xperia8:Android11、京セラ(かんたんスマホ2)で起こりました。時間がかかるためエミュレータでは試していません。
|
87
97
|
|
1
文章表現をより分かりやすくした。
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
インストールして最初の2,3回はほぼ正確に鳴り、数日後(数回の使用後)に不正確になるように思われます。
|
11
11
|
|
12
12
|
### 該当のソースコード
|
13
|
-
メインアクティビティでアラームを鳴らす時刻(alarmTime)を取得してからサービスを立ち上げます。以下はサービスとマニフェストに含まれるコードの主要部分です。
|
14
|
-
スマホがスリープ中にアラーム時刻となった場合に
|
13
|
+
メインアクティビティでアラームを鳴らす時刻(alarmTime)を取得してからサービスを立ち上げます。スマホがスリープ中にアラーム時刻となった場合にアクティビティの画面が立ち上がり、さらにPINの入力をせずに音を止められすようにするなどのために、Manifestにいくつかのpermissionを記述しています。
|
14
|
+
以下はサービスとマニフェストに含まれるコードの主要部分です。
|
15
15
|
|
16
16
|
kotlin
|
17
17
|
|
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
|
74
74
|
### 問題に対して試したこと
|
75
|
-
以下のことをやってみましたが、状況は変わりませんでした(アプリをインストールしなおすと
|
75
|
+
以下のことをやってみましたが、状況は変わりませんでした(アプリをインストールしなおすと2~3回は正確に動き、その後再び問題が起きました。)
|
76
76
|
|
77
77
|
・PendingIntentのFLAGをあれこれ変えた。
|
78
78
|
・PendingIntentのリクエストコードを変えた。
|
@@ -83,7 +83,7 @@
|
|
83
83
|
・スマホの設定から、省電力機能の電池の最適化の対象外とした。
|
84
84
|
|
85
85
|
### 補足情報
|
86
|
-
これらの
|
86
|
+
これらの問題は、実機3台(Pixel5a(5G):Android12、Xperia8:Android11、京セラ(かんたんスマホ2)で起こりました。時間がかかるためエミュレータでは試していません。
|
87
87
|
|
88
88
|
|
89
89
|
|