--> -->
バックグラウンドで処理を行いたい場合、Sleepしてしまうと処理が止まってしまうため、WakeLockを使うといいように書いてあったりします。
http://techbooster.org/android/application/4429/
私もSleep中に処理が止まってしまうのに悩んでいたので、「これだっ」と思って早速実装してみましたが、どうも一度寝てしまうと起きてくれません。
同じ事に悩んでいる人はいるらしく、検索しているとWakeLockはWake状態をLockするためのもので、SleepをWakeするためのものではない事が分かりました。
http://stackoverflow.com/questions/16450947/how-to-wake-the-android-device-from-deep-sleep-using-wake-lock
上記の記事ではAlarmManagerを使えとあり、試してみたところうまくいったので簡単にまとめてみます。
概要としては、ServiceからAlarmを仕掛け、Alarmが起動したらcallbackしてService内の処理を実行します。
まずはService内からAlarmを仕掛けます。
InfoTransferService.java*1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | - | - ! | | | | ! - | | | | ! - | - ! - ! - ! | ! - - | | | | | | - ! ! - | - ! | | | ! - | ! - | - ! |
|
InfoTransferBroadcastReceiver.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| - | | | | | | - | | ! - - | | ! - - | | ! | ! |
|
InfoTransferBroadcastReceiverInterface.java
1
2
3
| - | ! |
|
これでソースの実装は完了です。
しかし、実はここまで書いてもAlarmは起動してくれません。色々調べてみると、manifestファイルにReceiverの記述が必要なことが分かりました。
AndroidManifest.xml
1 2 3 |
|
ここについうっかりandroid:process=":remote"とか書いてしまうと、Alarmで起動されるたびにlistenerがnullになってしまい、callbackできません。android:processはしていしないようにしましょう。
こんなのあるんですねー。 離れるとアラームで知らせてくれるそうです。 スマホに付けておいたらどこに行ったか分からなくならなくて良いかも。 でももっと小さくならないかな。 |
|
ソースは様々なサイトの記述を参考にさせていただいています(部分部分は結構そのままだったりします、ごめんなさい)。
でも大変助かっています、ありがとうございます。